多态
多态指的是继承, 子类是父类的不同形态
向上转型
子类中有父类的所有方法, 所以可以视作父类; 称作向上转型
动态绑定
运行时, 决定使用哪一个方法, 叫做 动态绑定(运行时); 相对的, 在编译过程中就能确定调用哪一个方法, 叫做 前期绑定, 所有的 static/final/private 方法都是静态绑定;
在子类中覆写父类中同名的 private 方法并修改为 public 类型, 因为 private 不适用动态绑定, 所以将子类赋值给父类的声明, 通过父类的声明调用的是父类中的这个 private 这个方法;(private可以在父类中调用)
在父类中调用动态绑定的方法, 会调用子类中覆写的方法, 但是如果子类的方法中有子类的成员变量, 那么要考虑子类的成员变量是否赋值;
例如, 在父类的构造方法中调用子类覆写的方法, 如果子类的方法里有成员变量, 那么这个成员变量是没有初始化的(父类构造方法->子类成员变量->子类构造函数);
// 类 Parent
public Parent {
Parent(){
method();
}
public void method(){
}
}
// 类 Child
public Child extends Parent{
private List<String> lists = null;
Child(){
super();// 父类中调用 Child#method()
lists = new ArrayList<String>();
}
public void method(){
lists.add("string");
}
}
// 调用
Child a = new Child();
会报错
向上转型的存在, 在设计方法时, 将参数类型设计为基类, 这样传入子类时, 就可以传入多种父类的继承类; 修改父类就可以添加特定的方法, 保持扩展性