多态继承的运行时绑定

来源:互联网 发布:淘宝上在哪申请信用卡 编辑:程序博客网 时间:2024/06/07 21:04
今天在博客上看见一道多态的执行顺序题,如下

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准时睡觉的,为了解决这个问题拖了一小时还没洗澡.....不过蛮开心的,碎觉。
0 0
原创粉丝点击