程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

为什么当我说 new House("x") 时会调用超类构造函数 Building()?

发布于2022-06-24 17:02     阅读(240)     评论(0)     点赞(1)     收藏(4)


我有以下代码,但我不明白为什么当我运行它时它会在打印"b"之前打印"h hn x"为什么"b"会打印出来,因为我在Building执行时根本没有调用超类House()

class Building {
    Building() {
        System.out.print("b ");
    }

    Building(String name) {
        this();
        System.out.println("bn " + name);
    }
}

public class House extends Building {
    House() {
        System.out.println("h ");
    }

    House(String name) {
        this();
        System.out.println("hn " + name);
    }

    public static void main(String[] args) {
        new House("x ");
    }
}

解决方案


In inheritance it is necessary to initialize all the fields present in super-class first, because those fields are get used in subclasses, for this before construction of your subclass super class constructor get called to initialize all the field present in your super class.

Super class constructor called when you construct subclass instance. In your code you are creating new House("x "); Instance of House.

It calls House parametrized constructor House(String name) at this time your super class implicit constructor get called.



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/463668/b4bde38684787c4d54b5/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)