如何在不更改类b的情况下编译以下代码?
class a {
public a(int x) {
System.out.println(x);
}
}
class b extends a {
public b(int x) {
//super(x);
}
}
答案 0 :(得分:0)
我不完全确定你想要实现什么,但要编译它,只需将隐式构造函数添加到类a
:
class a {
public a(int x) {
System.out.println(x);
}
public a() {
// implicit constructor
}
}
由于b
扩展a
并且不调用超级构造函数,a
的隐式构造函数被称为“场景后面”。因此a
必须提供一个。
答案 1 :(得分:0)
对于它的价值,你需要在父类中添加一个零参数构造函数,代码将开始编译。
class a {
public a() {
}
public a(int x) {
System.out.println(x);
}
}
class b extends a {
public b(int x) {
//super(x);
}
}
答案 2 :(得分:0)
当子类扩展超类时,如果没有编写构造函数,则采用默认构造函数。但是,如果在类编译器中编写的任何构造函数不会保留默认构造函数。当子类继承超类时,必须具有默认构造函数,因为对于继承,编译器将始终首先转到超类构造函数,然后是子类构造函数。例如:
如果我们有
class A{
}
class B extends A{
}
我们不需要编写构造函数。编译器将采用默认构造函数。
但如果我们有
class A{
public A(double i){
}
}
class B extends A{
public B(double j){
}
}
在这种情况下,我们需要为超类编写显式的默认构造函数。