2015-11-01 96 views
-1

我从平面类扩展了penthouse。我知道当我从扩展类创建对象时,父类的构造函数首先被调用。父类的构造函数不能应用于子构造函数中的给定类型

但我不明白为什么我不能更改阁楼构造函数来初始化只存在阁楼中的新字段。我应该如何更改我的Penthouse构造函数,以免它与Flat构造函数冲突?

error: constructor Flat in class Flat cannot be applied to given types; Penthouse(int new_jakuzi, boolean 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(); 
    } 
} 

回答

5

由于Flat没有构造函数接受一个int和一个布尔值,你必须创建一个或调用哪个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 ; 
} 

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

1

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

+0

是的,我想通了,我不得不总是包括超(new_cena,NEW_ADDRESS)构造函数EVERY我的阁楼建设者! – ERJAN

1

添加默认的构造平板类将解决错误:

Class Flat { 
    Flat() { 

    } 
} 
相关问题