当类不从其基类继承任何字段时,为什么它仍必须调用其基类构造函数?

问题描述 投票:-3回答:2
public class Parent {

    public Parent(Foo foo){
        System.out.println(foo);
    }
}

-

public class Child extends Parent{

    }

我们还没有从Parent类继承任何东西。然后,当我们从Parent类创建对象时,我们不应该初始化Child类中的任何东西。

在这种情况下,为什么Java迫使我们在Parent构造函数中强制我们调用Child构造函数?


编辑:伙计们! 我知道该怎么做才能解决此编译错误。我只是在问为什么Java在特殊情况下没有这种情况。

因为在子类中,我们调用超类构造函数来初始化我们继承的所有东西,但是现在我们没有继承任何东西!

Edit2:在这种情况下,我没有问题。我只给出这个例子来阐明我的主要问题:“当我们不从基类继承任何东西时,为什么Java仍然迫使我们在子类中调用基类的构造函数。

java oop inheritance
2个回答
0
投票

[编写C0]类的人显然认为,他们编写的构造函数(带有参数)是初始化Parent实例的唯一有效方法。那就是构造函数。如果初始化应该是可选的,则由该程序员提供替代构造函数。 Java不必再去猜测它们,并决定不需要构造函数进行任何初始化,而应将其跳过。


-1
投票

因为Parent没有无参数的构造函数。要创建Parent实例,Java必须调用所有父级的构造函数。在您的情况下,Child类的构造函数具有参数,这就是为什么Java无法隐式调用它的原因,因此您必须显式地执行此操作

© www.soinside.com 2019 - 2024. All rights reserved.