另一道关于继承的面试题

题目描述

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 ????

阅读 1.7k
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.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题