如何使这种继承在Java中工作?
我们如何在不改变b类的情况下编译下面的代码如何使这种继承在Java中工作?,java,inheritance,Java,Inheritance,我们如何在不改变b类的情况下编译下面的代码 class a { public a(int x) { System.out.println(x); } } class b extends a { public b(int x) { //super(x); } } 我不完全确定您想要实现什么,但要使其编译,只需将隐式构造函数添加到类a: class a { public a(int x) {
class a {
public a(int x) {
System.out.println(x);
}
}
class b extends a {
public b(int x) {
//super(x);
}
}
我不完全确定您想要实现什么,但要使其编译,只需将隐式构造函数添加到类
a
:
class a {
public a(int x) {
System.out.println(x);
}
public a() {
// implicit constructor
}
}
由于
b
扩展了a
而不调用超级构造函数,因此a
的隐式构造函数被称为“幕后”。因此,a
必须提供一个。为了实现它的价值,您需要在父类中添加一个零参数构造函数,代码将开始编译
class a {
public a() {
}
public a(int x) {
System.out.println(x);
}
}
class b extends a {
public b(int x) {
//super(x);
}
}
当子类扩展超类时,若并没有编写构造函数,它将使用默认构造函数。但是,如果类编译器中编写的任何构造函数都不会保留默认构造函数。当子类继承超类时,必须有默认构造函数,因为对于继承,编译器总是首先转到超类构造函数,然后再转到子类构造函数。例如: 如果我们有
class A{
}
class B extends A{
}
我们不需要编写构造函数。编译器将采用默认构造函数
但如果我们有
class A{
public A(double i){
}
}
class B extends A{
public B(double j){
}
}
在这种情况下,我们需要为超级类编写显式的默认构造函数。如果不能更改类b,请更改类a。从编译器得到的错误消息告诉您问题所在。阅读它。只需在
类a
中声明一个无参数构造函数,而不在类中声明默认构造函数。。有没有其他办法解决这个问题。贝科兹。我的一个朋友问我这个问题时怀疑我。有人不断降低我的分数。这种行为使我泄气。你的朋友,嗯?他每次都叫老师或教授的名字吗?我知道。。如果我们在任何类中都有显式构造函数。。这将超过默认的隐式构造函数。我只是在问其他的可能性。没有其他的可能性,这么简单。为什么这些解决方案被否决?这是一个正确的答案。