父类的构造函数不能应用于子构造函数中的给定类型

时间:2015-11-01 10:56:11

标签: java inheritance constructor

我从平地班扩建了顶层公寓。我知道当我从扩展类创建对象时,首先调用父的构造函数。

但我不知道为什么我无法改变Penthouse构造函数以初始化仅存在于Penthouse中的新字段。我应该如何更改我的Penthouse构造函数,以免它与Flat构造函数冲突?

  

错误:构造函数Flat中的Flat不能应用于给定的类型;       阁楼(int new_jakuzi,布尔has_elev){

class Penthouse extends Flat{

    int number_jakuzi ;
    boolean has_elevator;

    Penthouse(int new_jakuzi, boolean has_elev){
        cena = 0 ;
        address = "unknown";
        number_jakuzi = new_jakuzi;
        has_elevator = has_elev ;
    }

    Penthouse(String novi_addrees, int novi_cena){

    }

    void advertise(){
        System.out.println("great penthouse on sale!" + 
        " number of jakuzi " + number_jakuzi + 
        " it has elevator: " + has_elevator+
        " at price: " + cena) ;
    }
}

class Flat{
    int cena ;
    String address;
    Flat(String novi_address, int new_cena){
        cena = new_cena ;
        address = novi_address ;
    }

    void show_data(){
        System.out.println("cena: " + cena  + " address: " + address);
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        Flat x = new Flat("bogenbai", 45);
        x.show_data();
    }
}

3 个答案:

答案 0 :(得分:5)

由于Flat没有构造函数接受int和boolean,因此您必须创建一个或从Flat构造函数中明确调用您想要的Penthouse构造函数:

Penthouse(int new_jakuzi, boolean has_elev){ 
    super ("something", 15); // for example;
    cena = 0 ;
    address = "unknown";
    number_jakuzi = new_jakuzi;
    has_elevator = has_elev ;
}

P.S。请为您的标识符使用Java命名约定(例如hasElevator而不是has_elevator)。你的代码很难阅读。

答案 1 :(得分:1)

Flat class没有默认(无args)构造函数。因此,在扩展类构造函数中,您必须显式调用适当的超类(Flat)构造函数。这应该是扩展类构造函数中的第一个调用。如果Flat确实有一个默认构造函数,编译器会使用默认值为你完成此操作。

答案 2 :(得分:1)

将默认构造函数添加到Flat类将解决错误:

Class Flat {
     Flat() {

     }
}