继承 extends
-
class 子类 extends 父类
-
子类就可以不定义父类当中的成员了
-
使代码重复使用
-
继承之后要添加新成员,否则无意义,自己的成员优先
-
super 指定告诉编译器访问的父类中的成员,构造方法没有被继承,需要super调用。和this一样不能出现在static方法中。
-
super()调用父类的构造方法。必须要在第一行,并且不能和this()同时出现
-
不同包中的子类用super引用
-
java不支持多继承 ,有接口
-
final 常量,方法不能被重写
-
组合 把一个类作为另一个类的成员
-
多态:不同的对象去完成某个行为会产生出不同的状态
-
条件
-
发生在继承条件下
-
需要重写
-
向上转型
-
-
什么是向上转型?把子类对象给到父类对象的引用,也就是父类引用引用了子类对象
-
子类重写父类成员函数,发生在动态绑定,编译期间无法绑定。父类引用 引用 子类对象,通过父类引用去调用父类和子类同名的方法,此时调用的是子类的方法。
-
静态绑定使重在,编译阶段就绑定
-
当子类继承父类之后,在实例化子类对象的时候,先要调用父类的构造方法,来帮助父类初始化。
-
-
执行顺序:父类的静态->子类的静态->父类的实例-父类的构造-子类的实例-子类的构造
向上转型
class A {}
class B extends A {}
class C extends B {}
public class Test {public static void main(String[] args) {A a0=new A();//1A a1=new B();//2A a2=new C();//3}
}
-
父类引用只能调用父类,不能调用子类特有方法
-
调用的方法子类和父类都有,运行的时候会调用子类的方法,这叫动态绑定(晚绑定)
-
编译的时候认为还是确实调用了父类的方法,运行的时候绑定到了子类当中
-
-
静态绑定(早绑定):编译的时候就已经确定调用的方法
-
-
直接赋值
-
通过传参
-
通过返回值
-
-
同一个引用调用了同一个方法,但是引用的对象不一样,表现得行为不一样,把这种思想称之为多态
向下转型
-
不安全
-
需要用instanceof进行判断
重写
-
方法名相同
-
参数列表相同(顺序、个数、类型)
-
返回值类型相同
-
被final修饰的方法,使密封方法,不能被重写
-
被static修饰的方法,不能被重写
-
子类重写的访问权限要>=父类的 访问修饰限定符权限排序:private<default<protected<public
-
被private修饰的方法使不能被重写的
-
范围值类型构成父子类关系也成为重写,构成协变类型
-
可以使用@override注释来显式指定
-
在构造方法中调用父类和子类同名的方法时也会发生动态绑定。意味着构造方法内也会发生动态绑定。故应当避免在构造方法中调用重写的方法。
-
先分配内存空间再调用构造方法
多态可以降低圈复杂度