类的继承**
子类继承父类可访问的数据域和方法域,这种继承是复制还是共享,取决于是实例变量(方法)还是静态变量(方法)。
复制的意思也就是说,子类继承了父类的某数据域i,那么子类修改自身的这个i不影响父类的那个i。
super的两种必需的使用场景
- 显示调用父类的构造方法:必须位于子类构造方法体的首行
- 在重写中需要调用父类的普通方法时
- 多态:使用父类对象的地方都可以使用子类对象
方法的匹配和方法的动态绑定
方法匹配:在编译时,根据声明类型来确定从哪条匹配链;
如果子类型有该方法,而声明类型没有,那么会产生编译错误。
方法绑定:在运行时,根据实际类型来确定从哪里开始往父类搜索执行的方法。如果执行的方法调用了其他方法,并且这个方法依然有继承链,那么搜索开始的位置依然从那个实际类型开始。
抽象类
当一个父类描述了其所有子类共有的某些行为特征,但这些行为特征只能针对子类本身来具体地实现,那么父类所描述的这些行为特征就称为抽象方法,
- 有抽象方法的类必须被声明为抽象类;没有抽象方法的类可以被声明为抽象类。
- 抽象类不能被实例化,但它仍然可以作为一种数据类型。
- 抽象类的抽象方法只能被声明,不能被定义。
- 抽象类的构造方法只能为
protected
:因为抽象类必须被子类加以实现,同时又不能被外部调用以创造该抽象类的实例。 - 抽象类和抽象方法,使得在使用这些抽象方法时可以不用区分到底是哪一子类对象。(求面积这一方法就不用区分矩形或三角形)
- 抽象子类若不实现所有的抽象方法,那么该子类也必须为抽象类
- 抽象方法是非静态的,从而防止外部从抽象类来调用抽象方法。
接口
接口中只有三种方法:public abstract ``public static public default
,接口数据域均为 public static final
为什么均为public?