另一道关于继承的面试题

题目描述

public class Base {

private String baseName = "base";

public Base() {
    callName();
}

public void callName() {
    System.out.println(baseName);
}

static class Sub extends Base {
    private String baseName = "sub";

    public void callName() {
        System.out.println(baseName);
    }
}

public static void main(String[] args) {
    Base b = new Sub();
}

}

你期待的结果是什么?实际看到的错误信息又是什么?

为什么会输出: null ????

aluckdog
浏览 583回答 1
1回答

胡子哥哥

public class Base { private String baseName = "base";//1 public Base() { callName();//2 } public void callName() { System.out.println(baseName); } static class Sub extends Base { private String baseName = "sub"; public void callName() { System.out.println(baseName);//3 } } public static void main(String[] args) { Base b = new Sub(); } } Base b = new Sub();先初始化父类,顺序如上面的1,2,3,进入callName方法时子类的属性还没有初始化执行代码,所以打印的是null.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java