如何使这种继承在Java中工作?

如何使这种继承在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) {

我们如何在不改变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) {
        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
中声明一个无参数构造函数,而不在类中声明默认构造函数。。有没有其他办法解决这个问题。贝科兹。我的一个朋友问我这个问题时怀疑我。有人不断降低我的分数。这种行为使我泄气。你的朋友,嗯?他每次都叫老师或教授的名字吗?我知道。。如果我们在任何类中都有显式构造函数。。这将超过默认的隐式构造函数。我只是在问其他的可能性。没有其他的可能性,这么简单。为什么这些解决方案被否决?这是一个正确的答案。