我从平地班扩建了顶层公寓。我知道当我从扩展类创建对象时,首先调用父的构造函数。
但我不知道为什么我无法改变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();
}
}
答案 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() {
}
}