Java 继承与多态
一、继承
- 作用:复用父类代码,表示 is-a 关系。
- 语法:class 子类 extends 父类 {}
- Java 类单继承;接口可多实现。
- 子类构造器默认先调用父类无参构造 super();父类无无参构造时需显式 super(参数)。
- 创建子类对象:先执行父类构造,再执行子类构造。
- 子类不能直接继承父类 private 成员;构造器不能被继承。
- 方法重写 @Override:方法名、参数列表相同;返回类型相同或协变;访问权限不能更小;异常不能更宽。
- static、final、private 方法不能被重写(private 只是同名新方法)。
- final:final 类不能继承;final 方法不能重写;final 变量不能再次赋值。
二、多态 - 前提:继承/实现 + 方法重写 + 父类引用指向子类对象。
- 格式:父类 变量 = new 子类();
- 方法调用:编译看左边,运行看右边(动态绑定)。
- 成员变量:编译和运行都看左边(父类引用类型)。
- static 方法:看左边,不表现多态。
- 向上转型:子类 -> 父类,自动。
- 向下转型:父类 -> 子类,强制;先用 instanceof 判断。
- 抽象类和接口常用来体现多态:父类/接口引用调用子类/实现类重写方法。