多态继承的运行时绑定

今天在博客上看见一道多态的执行顺序题,如下

public class Dervied extends Base {

    private String name = "dervied";

    public Dervied() {
        tellName();
        printName();
    }
   
    public void tellName() {
        System.out.println("Dervied tell name: " + name);
    }
    
    public void printName() {
        System.out.println("Dervied print name: " + name);
    }

    public static void main(String[] args){
        
        new Dervied();    
    }
}

class Base {
    
    private String name = "base";

    public Base() {
    
        tellName();
        printName();
    }
    
    public void tellName() {
        System.out.println("Base tell name: " + name);
    }
    
    public void printName() {
        System.out.println("Base print name: " + name);
    }
}

我原本以为答案是这样的:

Base tell name: null
Base print name: null
Dervied tell name: dervied
Dervied print name: dervied



然而运行后结果却是:

Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied

也就是说,在执行父类构造方法的时候,已经执行子类重写后的方法了。

根据我的理解,应该是运行时绑定在作祟,当子类新建对象时,父类调用被子类重写过的方法,那么编译器就会判定,应该将该方法编译为子类重写的方法。

我想了好久,除了这个解释应该没别的原因,如果我错了,请私信我。

啊,本来每天11.30准时睡觉的,为了解决这个问题拖了一小时还没洗澡.....不过蛮开心的,碎觉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章