如何从超类中扩展属性

时间:2016-08-06 00:25:46

标签: java

我是java的新手并试图创建一个简单的命令行应用程序,但我正在做什么错误,我没有意识到它。这是我的代码

public class Auto1 {
    private String make;
    private String model;
    private int value;
    private int soldPrice;
    private int year;
    private int hp;


    public Auto1(String make, String model, int value, int soldPrice, int year, int hp) {
        this.make = make;
        this.model = model;
        this.value = value;
        this.soldPrice= soldPrice;
        this.year = year;
        this.hp = hp;
    }

    public void setMake(String a) {
        make = a;
    }
    public void setModel(String b) {
        model = b;
    }
    public void setvalue(int c) {
        value = c;
    }
    public void setSoldPrice(int d) {
        soldPrice = d;
    }
    public void setYear(int e) {
        year = e;
    }
    public void setHp(int f) {
        hp = f;
    }
    public String getMake() {
        return make;
    }
    public String getModel() {
        return model;
    }
    public int getValue() {
        return value;
    }
    public int getSoldPrice() {
        return soldPrice;
    }
    public int getYear() {
        return year;
    }
    public void price() {
        int price = value - soldPrice;
        if(a >=5000) {
            System.out.println("You Overpaid");
        } else {
            System.out.println("Fair Price");
        }
    }
}

我正在尝试创建一个子类,我将在其中创建此代码

public class Auto extends Auto1{
     Auto1 auto;
     public auto = ("Audi","R8",162900,200000,2017,610){}
}

然而它不允许我,因为“公共”显然是非法的类型开始,我不知道如何创建一个对象。对不起,如果这听起来很愚蠢,但我对Java很新。

2 个答案:

答案 0 :(得分:1)

您的行public auto = ("Audi","R8",162900,200000,2017,610){}不是有效的Java语法。你的意思是把它放在你的构造函数中吗?您的班级Auto看起来比Auto1更具体,即引用Auto1的特定“类型”。

public Auto()
{
    super("Audi","R8",162900,200000,2017,610);
}

答案 1 :(得分:1)

你有一个问题的答案,但你想要做的事情看起来不一定是最好的OO设计。 从它的角度来看,你的Auto1应该扩展你的Auto类(即其他方式),因为它(在理论上)更具体。在这种情况下,取决于您正在做什么,您可能希望将Auto设为抽象类。 如果您的Auto1是带有轮子和引擎的“真正”汽车,而Auto1只是一些模型信息,那么最好不要扩展Auto1,而是在Auto类中使用Auto1类型变量。在这种情况下,确保你真的想让它“可设置”,理论上,一旦创建汽车(自动类型的对象),它不应该改变像make和year这样的属性。