Java笔试题——Problem1

Problem

以下程序输出什么?解释原因。


public class TestSub {
    private String a = "父类的属性值";

    public TestSub() {
        call();
    }

    public void call() {
        System.out.println("父类call方法调用" + a);
    }

    static class TestSup extends TestSub {
        private String a = "子类的属性值";

        public void call() {
            System.out.println(a);
        }
    }

    public static void main(String[] args) {
        TestSub ts = new TestSup();
    }
}

Answer

运行结果为null,子类对象在创造时调用父类构造器,父类构造器调用call方法,call方法被子类重写,子类重写的方法中调用的a是子类的a,又由于当前在创造父类对象,所以子类的a没有被赋值,所以输出null。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,859评论 2 9
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,031评论 0 3
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,609评论 3 93
  • 如果有天你觉得工作很累生活很茫, 身体疲惫情绪低落突然很丧, 不妨停下来, 你需要休息放空一下了。 音乐打开音量调...
    阿痴啊阅读 171评论 0 0