好的,我在这里有这些课程:
public class item {
public String name,constructor ;
public int year;
public double price ;
public item(String name,int year,double price,String constructor){
this.name = name ;
this.year = year ;
this.price = price ;
this.constructor = constructor ;
}
public String getName(){
return name ;
}
public int getYear(){
return year ;
}
public double getPrice(){
return price ;
}
public String getConstructor(){
return constructor ;
}
public void setName(String name){
this.name = name ;
}
public void setYear(int year ){
this.year = year ;
}
public void setPrice(double price){
this.price = price ;
}
public void setConstructor(String constructor){
this.constructor = constructor ;
}
}
以及类硬件:
public class hardware extends item {
private String proccesor;
private String motherboard;
private String RamMemory;
private String drive;
public hardware(String name, String proccesor,String motherboard, String RamMemory,
String drive ) {
super(name);
this.proccesor= proccesor;
this.motherboard= motherboard;
this.RamMemory= RamMemory;
this.drive= drive;
}
public void setProccesor (String proccesor) {
this.proccesor= proccesor;
}
public void setMotherboard(String motherboard){
this.motherboard= motherboard;
}
public void setRam(String RamMemory){
this.RamMemory= RamMemory;
}
public void setDrive(String drive){
this.drive= drive;
}
}
现在当我编译项目时,它编译得很好并且没有问题弹出。但是当我尝试编译硬件类时,cmd给了我这样的信息:
Hardware.java.11: error: constructor item in class item cannot be applied to given types super(name);
Required :String,int,double,String
Found: String
Reason: actual and formal arguments lists differ in length
答案 0 :(得分:2)
您正在调用超类中不存在的构造函数。
在您的硬件构造函数中,
super(name);
应更改为调用item中唯一可用的构造函数:
public item(String name,int year,double price,String constructor)
在Java中,调用方法时需要所有参数。与Javascript之类的语言不同,如果您不传递某些内容,则会传递隐式undefined
。
答案 1 :(得分:2)
当java尝试编译hardware.java
时,它会看到语句super(name)
,并在类item
中查找构造函数,该构造函数将String
作为其唯一参数,因为它是你怎么称呼它。
但是,类item
只定义了一个构造函数,它需要4个参数:
public item(String name,int year,double price,String constructor)
由于item
必须指定年份,价格和构造函数,因此您可能需要将这些字段添加到hardware
类的构造函数中,然后您可以调用super(name, year, price, constructor)
来自您的硬件构造方法。
或者,您可以修改item
类以提供另一个构造函数,省略年份,价格和构造函数参数。
public item(String name){
this.name = name ;
}
在更改之后,硬件构造函数中的super(name)
现在将在类项中找到item(String)
构造函数方法。
答案 2 :(得分:1)
查看item(String name,int year,double price,String constructor)
构造函数。
你应该打电话
super(name,year,price,constructor)
// change the parameters as you want but the types should remain
或将类似的构造函数添加到项类:
item(String name) { ... }
BTW班级名称应该(不一定)以大写字母开头。
答案 3 :(得分:0)
class item
没有只接受String
参数的构造函数。
答案 4 :(得分:0)
Item class
没有item(String name)
构造函数。