重庆—java互联网架构软件工程师学习记录—Day08(面向对象2)

Java互联网架构软件工程师——第一阶段

Day08–面向对象2


前言

学习继承的多种用法和几个关键字的用法


提示:以下是本篇文章正文内容,下面案例可供参考

一、this关键字

1.1概述

代表的是本类对象 的引用
用来调用 本类里的 成员变量.方法
大多数情况下,都可以省略
必须出现的场景有两个:
—当成员变量名 和 局部变量名 相同时
—构造方法间 互相调用时

1.2 场景1—当同名的成员变量和局部变量,用this调用成员变量

代码如下(示例):

public class Test1_This {
			public static void main(String[] args) {
				//TODO
		//		new Person().show();
				new Person().test();
			}
		}
		class Person{
			//当成员变量 和 局部变量 同名时,使用this
			int sum = 10;
			int age = 20;//成员变量
			
			public void test(){
				int age = 10 ;
				age = 100 ;//改了局部变量
		System.out.println(age);//局部变量,100
				
				this.age = 200 ;//改了成员变量
		System.out.println(this.age);//成员变量,200
			}
			
			public void show(){
				int age = 10;//局部变量
		System.out.println(age);//就近原则,使用了局部变量,10?
				//TODO 使用同名的 age成员变量
		//TODO this代表本类对象的引用,可以调用本类的资源
		//本质上,底层帮你创建了一个本类对象,叫this
		//Person this = new Person();
		//场景1:当同名的成员变量和局部变量,用this调用成员变量
				System.out.println(this.age);
				//使用了成员变量,10
		//		System.out.println(this.sum);
				//不同名时,可以省略this
				System.out.println(sum);
			}
		}

1.3 场景2—构造方法间的调用

小总结:
如果想要完成 构造方法间的调用,使用this
如果this出现在构造方法里,必须是第一条语句

代码如下(示例)

//测试 this关键字
public class Test02 {
	public static void main(String[] args) {
		//场景2.构造方法间的调用
		new Person2();
		new Person2(1);
		new Person2("");
	}

}

class Person2{
	
	public Person2(){
		//无参构造 调用 含参构造 --- 必须是第一条语句
		this("小明");
		System.out.println(1); 
	}
	public Person2(int age){
		// 含参构造 调用 无参构造 ---必须是第一条语句
		this();
		System.out.println(2);
	}
	public Person2(String name){
		System.out.println(name);
	}

	
}

二、访问控制符

用来控制一个类,或者类中的成员的访问范围。
在这里插入图片描述

三、继承

3.1 概述

是父类和子类之间的关系;继承只有一个父类;子类继承父类之后,就拥有了父类的全部功能
好处:提高了父类里代码的复用性,减少了子类代码的编写

3.2 特点

—使用extends关键字
—相当于子类把父类的功能复制了一份
—java只支持单继承
—继承可以传递(爷爷,儿子,孙子的关系)
—不能继承父类的私有成员
—继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展
—像是is a 的关系

代码如下(示例):

//测试 继承
		public class Test3_Extends {
			public static void main(String[] args) {
				//创建子类对象测试 
		//		new Son().eat();//使用了爸爸类里方法
				new Son().xiaqi();//使用了爷爷类里方法
			}
		}
		//4,父类 抽取子类的 共性代码
		class Yeye{
			public void xiaqi(){
				System.out.println("爷爷泡的茶");
			}
		}
		class Baba extends Yeye{
			//6,父类的私有成员 ,无法被继承
			private void eat(){//提高复用性
				System.out.println("吃肉");
			}
		}
		//1,使用关键字extends表示继承关系
		//5,java只支持单继承
		class Son extends Baba{
			//3,继承关系是一种强制的依赖关系-强耦合
			//2,子类可以使用父类的所有功能
		}

3.3 super关键字

—1,用在子类里.调用父类的数据
—2,super如果出现在构造方法里,必须是第一条语句

3.4 方法的重写(override)

3.4.1 概述

前提:发生父子关系
子类继承了父类后,子类可以使用父类的所有内容,而且子类还可以添加扩展的功能,而且子类还能改(重写)父类的功能.

3.4.2 特点

–发生在子类中,想改父类原来的功能
–在子类中的方法声明/方法签名 和父类一样
–方法声明: 方法的返回值 方法名(参数列表

3.5 继承的使用

3.5.1 继承的 成员变量 使用

1,子类想要用父类的成员变量,通过super使用
2,super在底层帮你创建了一个父类的对象
3,通过super使用父类的功能

代码如下(示例):

// 测试   使用 继承  成员变量的使用
public class Test04 {
	public static void main(String[] args) {
		new z().show();
		new z().name();
		
	}

}

class f{
	
	 String name = "小小";
	 public void name() {
		 System.out.println(88);
		
	}
	 
}
class z extends f{
	String name = "jack";
	int  age = 10;
	public void show() {
		int age = 20;
		System.out.println(age);//就近原则,使用局部变量
		System.out.println(this.age);//使用成员变量
		System.out.println(name);//用了自己的jack
		//想要在子类中,用父类的name?---使用 super
//super 表示父类对象的一个引用,专门用来调用父类的功能
		//f super = new f();
		super.name="rose";//修改父类的变量
		System.out.println(super.name);
		//System.out.println(super.name());
		
	}

3.5.2 继承的 成员方法 使用

1,子类继承父类后,
2,可以使用父类的所有功能(除了private)
3,还可以进行功能扩展
4,还可以 修改 父类的功能–重写–在不影响父类原有功能的前提下,把子类的功能进行修改
5,重写的要求:继承关系+有权限+方法声明和父类一样
6,开闭原则OCP:关闭源码修改,开放功能扩展

代码如下(示例):

// 测试 继承的  成员方法 使用

public class Test05 {
	public static void main(String[] args) {
		new zi2().id();
		new zi2().sex();
	}
}
class f2{
	
	public void id() {
		System.out.println(2144);
	}
	 public void sex(){
		System.out.println('女');
	}
}
//子类可以继承父类的
class zi2 extends f2{
	public void name() {
		System.out.println("小小");
	}
    
	//改变父类的功能---方法的重写
	//要求: 子类的方法声明必须和父类一样+有足够的权限
	 public void sex() {
		// super.sex();//调用父类的sex(),原来的功能没有任何影响
		System.out.println('男');
	}
}

3.5.3 继承的 构造方法 使用

1,子类继承了父类后,构造方法里,默认隐藏着super()
2,当父类中不存在无参构造时(只提供了含参构造),子类只能调用父类的含参构造
3,父类的构造方法 可以被继承吗 --不可以
4,哪些资源不可以继承 —私有的+构造方法

代码如下(示例):

//测试 继承的 构造方法

public class Test06 {
	public static void main(String[] args) {
		//先执行父类的构造方法 -- super(),在执行自己的
		new zi3();
	}
}
class f3{
	
	public f3(){
		System.out.println(120);
		
	}
	public f3(int i){
		System.out.println(888);
		
	}
}
class zi3 extends f3{
	public zi3(){
		//隐藏的,默认就存在,而且在第一条语句;
		//主动找到了父类的  无参构造  方法
		super();
		//super(6);//无参构造没了!!
		System.out.println("父类的构造方法");
	}
	
}

四、扩展

4.1 overload和override的区别

overload是重载:
在一个类里的现象.
方法名相同参数列表不同.
好处是:体现程序的灵活

override是重写:
在父子关系中,子类里的现象.
好处是:不影响原来的功能,改的是子类的.
要求:继承关系+有足够的权限+方法声明和父类一样

4.2 this和super的区别

—this代表本类对象,用来调用本类的成员变量/方法
—super代表父类对象,用来调用父类的成员变量/方法
—在构造方法里出现时,都得是第一条语句.
—this和super不能同时出现.

该处使用的url网络请求的数据。


总结

继承这个部分对于面向对象来说非常重要,要多练,多理解,后面才能学得轻松,加油!学习java的日子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值