多态

多态指的是继承, 子类是父类的不同形态

向上转型

子类中有父类的所有方法, 所以可以视作父类; 称作向上转型

动态绑定

运行时, 决定使用哪一个方法, 叫做 动态绑定(运行时); 相对的, 在编译过程中就能确定调用哪一个方法, 叫做 前期绑定, 所有的 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();
会报错

向上转型的存在, 在设计方法时, 将参数类型设计为基类, 这样传入子类时, 就可以传入多种父类的继承类; 修改父类就可以添加特定的方法, 保持扩展性

results matching ""

    No results matching ""