继承 extends

继承 extends

继承的关系 子类和父类
如子类为讲师和助教 父类为员工,父类包含子类的某些属性
格式

/*父类的格式
public class 父类名称{

}*/

public class Fu {

	int num=20;
	public void methFu() {
		System.out.println("父类方法执行了");
	}
}

/*子类的格式
public class 子类名称 extends{
//..
}*/

public class Zi extends Fu{

	int num=4;
	public void methZi() {
		System.out.println("子类方法执行");
	}
	
}
//main函数
public class hash {

	public static void main(String[] asgs)
	{

		Fu fu=new Fu();
		Zi zi=new Zi();
		System.out.println(fu.num);
		System.out.println(zi.num);
		zi.methZi();
		zi.methFu();
		fu.methFu();
	}
}
//运行结果:
/*20
4
子类方法执行
父类方法执行了
父类方法执行了
*/

子类可以访问父类,父类不能访问子类。父亲不知道儿子是谁,儿子知道父亲是谁
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

  1. 直接通过子类对象访问成员变量:
    等号左边是谁, 就优先用谁,没有则向上找。
  2. 间接通过成员方法访问成员变量:
    该方法属于谁,就优先用谁,没有则向上找。

区分方法重名的方法

变量 使用方法
局部变量: 直接写
本类的成员变量: this.成员变量名
父类的成员变量: super.成员变量名

这三者重名

//Fu
package demo02;

public class Fu {

	int num=10;
}
//Zi
package demo02;

public class Zi extends Fu{
	int num=20;
	public void method() {
		int num =30;
	System.out.println(num);//直接写 方法成员变量
	System.out.println(this.num);//本类  类的成员变量
	System.out.println(super.num);//父类  父类的成员变量
	}
}
主程序
package demo02;

public class ExtendsFild {
public static void main(String[] asgs) {
	Zi zi= new Zi();
	zi.method();
}
}

运行结果
30
20
10

结果说明了:

继承中方法的覆盖重写

方法覆盖重写的注意事项:

  1. 必须保证父子类之间方法的名称相同,参数列表也相同。
    @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
    这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。

  2. 子类方法的返回值必须小于等于父类方法的返回值范围。
    String
    前提: java. lang. object类是所有类的公共最高父类(祖宗类),java. lang. String就是object的子类。

  3. 子类方法的权限必须大于等于父类方法的权限修饰符.
    提示:public>protected>(default)—什么都不写 >private

继承特点:

  1. 子类构造方法中有一个隐含的"super();"调用所以先调用的父类后调用的子类.
  2. 可以通过super关键字在子类构造调用父类重载构造.
上一篇:JAVA面向对象OOP→继承extends、构造方法super、方法重写override


下一篇:vue学习笔记 extends扩展