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仍然迫使我们在子类中调用基类的构造函数。
[编写C0]类的人显然认为,他们编写的构造函数(带有参数)是初始化Parent
实例的唯一有效方法。那就是构造函数。如果初始化应该是可选的,则由该程序员提供替代构造函数。 Java不必再去猜测它们,并决定不需要构造函数进行任何初始化,而应将其跳过。
因为Parent
没有无参数的构造函数。要创建Parent
实例,Java必须调用所有父级的构造函数。在您的情况下,Child
类的构造函数具有参数,这就是为什么Java无法隐式调用它的原因,因此您必须显式地执行此操作