如何使这种继承在 Java 中起作用? [关闭]
Posted
技术标签:
【中文标题】如何使这种继承在 Java 中起作用? [关闭]【英文标题】:How to make this inheritance work in Java? [closed] 【发布时间】:2014-01-11 15:32:00 【问题描述】:我们如何在不改变类 b 的情况下编译下面的代码?
class a
public a(int x)
System.out.println(x);
class b extends a
public b(int x)
//super(x);
【问题讨论】:
如果不能改b类,就改a类。您从编译器获得的错误消息会告诉您问题所在。阅读它。 只需在class a
中声明一个无参数构造函数。
没有在类中声明默认构造函数..有没有其他方法可以解决这个问题。贝科兹。我的一个朋友问这个怀疑我。
有人不断降低我的观点。这种行为让我很沮丧。
你的朋友嗯?他是否有机会以老师或教授的名义出现?
【参考方案1】:
当子类扩展超类时,如果没有编写构造函数,则采用默认构造函数。但是,如果在类编译器中编写的任何构造函数都不会保留默认构造函数。当子类继承超类时,必须有默认构造函数,因为继承编译器总是先去超类构造函数,然后是子类构造函数。例如:
如果我们有
class A
class B extends A
我们不需要编写构造函数。编译器将采用默认构造函数。
如果我们有
class A
public A(double i)
class B extends A
public B(double j)
在这种情况下,我们需要为超类编写显式的默认构造函数。
【讨论】:
【参考方案2】:对于它的价值,您需要在父类中添加一个零参数构造函数,代码将开始正常编译。
class a
public a()
public a(int x)
System.out.println(x);
class b extends a
public b(int x)
//super(x);
【讨论】:
为什么这些解决方案被否决?这是一个正确的答案。【参考方案3】:我不完全确定您想要实现什么,但要编译它,只需将隐式构造函数添加到类 a
:
class a
public a(int x)
System.out.println(x);
public a()
// implicit constructor
由于b
扩展a
并且不调用超级构造函数,所以a
的隐式构造函数被称为“幕后”。因此a
必须提供一个。
【讨论】:
我知道..如果我们在任何类中都有显式构造函数..它将取代默认的隐式构造函数。 只是我在问其他可能性。 没有其他可能,就这么简单。以上是关于如何使这种继承在 Java 中起作用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用