类和子类

时间:2014-04-17 16:27:02

标签: java inheritance constructor

好的,我在这里有这些课程:

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

5 个答案:

答案 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)构造函数。