【问题标题】:Why does the constructor of a superclass automatically execute when i create a subclass in main()? [duplicate]为什么当我在 main() 中创建子类时,超类的构造函数会自动执行? [复制]
【发布时间】:2021-06-18 16:42:43
【问题描述】:

我并没有真正在任何地方使用super(),但仍然调用了超类的构造函数。为什么会这样?

class SuperDemo{
    public static void main(String[] args) {
        B subClass = new B();
        subClass.showbiz();
    }
}

class A{
    int i;
    A(){
        i = 10;
    }
}

class B extends A{
    
    void showbiz(){
        System.out.println("i in subclass " + i);
    }
}

【问题讨论】:

  • 这是语言的一部分。如果您不显式调用super,编译器将调用无参数版本。总是。
  • 这是隐含的。它必须被调用。为方便起见,编译器允许您不显式调用它,但无论您是否编写它都会调用它。
  • 如果你有A的子类,那么该子类的实例A的实例,所以它们必须按照A来构造' s 规则(可能加上子类强加的一些附加规则)。在不调用构造函数的情况下构造A 的实例是没有意义的。如果您发现自己处于有意义的情况下,那么您不应该在这种情况下使用继承。

标签: java inheritance super


【解决方案1】:

这就是语言的工作方式。如果不使用super显式调用超类的构造函数,则会隐式调用超类的默认构造函数。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2019-08-28
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多