继承
1.继承机制:允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承主要解决的问题是:共性的抽取,实现代码复用。
2.语法
修饰符 class 子类 extends 父类 {
// ...
}
3.成员访问
1)子类和父类不存在同名成员变量
2)子类和父类存在同名成员变量:可通过super访问父类的
super:从父类继承过来的数据的引用,只能在非静态方法中使用
ps:成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找
4.构造方法
子类对象构造时,需要先调用基类构造方法,然后执行子类的构造方法
ps:1. 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构
造方法
2. 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
3. 在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。
4. super(...)只能在子类构造方法中出现一次,并且不能和this同时出现
5. 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有
6.执行顺序:
a、父类静态代码块优先于子类静态代码块执行,且是最早执行
b、父类实例代码块和父类构造方法紧接着执行
c、子类的实例代码块和子类构造方法紧接着再执行
d、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行
7.final关键字:a、修饰变量或字段,表示常量(即不能修改)
b、表示此类不能被继承
c、修饰方法:表示该方法不能被重写,称为密封方法
8. 继承(is a)与组合(have a)
多态
去完成某个行为,当不同的对象去完成时会产生出不同的状态。
即同一个引用调用了同一个方法,但因为所引用的对象不一样,所表现的行为不一样,这种思想即为多态。
1. 向上转型:父类引用去调用子类对象,但只能引用父类内部的方法
父类类型 对象名 = new 子类类型()
Animal animal = new Cat("元宝",2);
animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换。
2. 动态绑定:父类引用去调用子类对象,通过父类引用去调用父子同名的方法,此时调 用的是子类的方法
ps:当在父类的构造方法中调用父子类同名的构造方法时,调用的是子类中的,发生了动态绑定
静态绑定:通过参数列表不一致等编译时已确定调用的是哪个方法
3.重写(也称为覆盖/复写):方法名相同,参数列表相同(顺序,个数,类型),返回值相同
ps.1)密封方法即被final修饰的方法,被static修饰的,被private修饰的,构造方法不能被重写
2)子类重写父类方法时,子类的方法访问修饰限定符>=父类
3)返回值可以不同,但必须具有父子关系
4.多态的优缺点
优:a. 能够降低代码的 "圈复杂度", 避免使用大量的 if - else
b.可扩展能力更强
缺:a. 属性没有多态性,当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性
b. 构造方法没有多态性