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

时间:2013-12-23 12:01:17

标签: java inheritance

如何在不更改类b的情况下编译以下代码?

class a {
    public a(int x) {
        System.out.println(x);
    }
}

class b extends a {
    public b(int x) {
        //super(x);
    }        
} 

3 个答案:

答案 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){
     }
}

在这种情况下,我们需要为超类编写显式的默认构造函数。