继承:
不能被继承的父类成员:
1.private成员
2.子类与父类不在同包使用默认访问权限的成员
3.构造方法
访问修饰符protected可以修饰属性和方法、本类、同包、子类可以访问
方法重写:
重写方法和被重写方法必须具有相同的方法名和参数列表
重写方法的返回值类型必须和被重写的方法的返回值类型相同或是其子类
重写方法不能缩小被重写方法的访问权限
overriding:在子集中,根据需求对父级继承的方法进行重新编写,以实现子类需求
先属性后方法
super关键字:
使用super关键字super代表父类对象
public class AppleTree extends Crop { public AppleTree(String brand) { //super(参数)在子类构造方法中调用且必须是第一句 super("苹果树",1,0, 2,100); //直接访问父类的构造方法 this.brand = brand; } }
如果想在子类中调用父类中被重写的方法,应该如何实现呢?
super关键字代表对当前对象的直接父类对象的默认引用 super可用于子类访问父类属性、父类方法
语法:super.<父类属性/父类方法>;
注意:使用super关键字可以访问父类的成员(属性、方法、构造方法)
子类中如何使用super关键字访问父类的成员?
1.super只能出现在子类的方法和构造方法中 2.super调用构造方法时,只能是第一句 3.super不能访问父类的private成员
继承中的构造方法:
构造方法中不允许同时出现this和super语句调用构造方法
构造方法:不能被继承,因此不能重写
简述方法重写的规则
1.方法名相同
public void fangfa(){ System.out.println("父类方法"); } public void fangfa(){ System.out.println("子类重写方法"); }
2.参数列表相同
public void fangfa(String name){ System.out.println("父类方法"); } public void fangfa(String name){ System.out.println("子类重写方法"); }
3.返回值类型相同或者是其子类
public Object fangfa(String name){ System.out.println("父类方法") } public volatile fangfa(String name){ System.out.println("子类重写方法"); }
4.访问权限不能严于父类
Object fangfa(String name){ System.out.println("父类方法") } public volatile fangfa(String name){ System.out.println("子类重写方法"); }
Java 虚拟机按照先父类后子类的顺序执行一系列的构造方法
父类属性 →父类构造方法→子类属性→子类构造方法