java - 子类(子)字段,静态和非静态

时间:2018-02-04 12:00:59

标签: java class inheritance static

我有以下类Rocket,我想为它创建子类,让我们说“U1”和“U2”。

现在U1和U2都有:

  • 成本
  • 重量(空的时候)
  • 最大重量(最大货物限额)
但是这些规格在U1火箭和U2火箭上都有所不同,尽管两者都是“火箭”。

如何在父类Rocket中声明规范并在子类U1和U2中赋予它们值?

或者我应该在子类中重新声明每个子类的值,并在父类中跳过声明它们?

1 个答案:

答案 0 :(得分:0)

类似这样的内容:Rocket类具有受保护的 cost, weight, maxWeight属性。 U1U2扩展它并使用自己的 public setter,以他们想要的任何方式设置他们的超级(Rocket)类属性。

public class Rocket {
    protected int cost;

    public int getCost(){ return cost;}
}

public class U1 extends Rocket {
    public U1(){ //constructor
        cost = 1; //setting cost of U1 Rocket
    }

    //if public setter is needed, to set cost with any other specs ...
    public void setCost(Specification spec){
        cost = spec.doSomething();
    }
}

public class U1 extends Rocket {
    public U1(){ //constructor
        cost = 2; //setting cost of U2 Rocket
    }

    //if public setter is needed, to set cost with any other specs ...
    public void setCost(Specification spec){
        cost = spec.doSomething();
    }
}

by Specification我指的是需要为成本设置适当值的任何不同类型的对象。

然后,如果您使用类似Rocket rocket = new U1();的内容并致电rocket.getCost(),则需要支付u1火箭的费用。

但是如果你想从外面设置成本,你应该首先创建U1的新实例并使用setter设置成本,然后将其投射到Rocket并使用rocket。

你也可以为你的超类使用构造函数Rocket:

public class Rocket {
    private int cost;
    public Rocket(int cost){
        this.cost = cost; //avoid shadowing
    }

    public void doSomethingWithCost(){ ... }
    public int getCost() {...}
}

public class U1 extends Rocket {
    public U1(){
        super(1); //setting default cost of U1 Rocket
    }
    public U1(int cost){
        super(cost); //if you need to set the cost when making new instance of U1
    }

}

这样,您可以使用父类中的值,并在子类中设置值。

虽然你的问题不是很清楚所以我不希望这是你需要的答案。请确保您按照问题中的链接和评论了解有关社区的更多信息。

另外,如果您认为答案是正确的,请将我的答案投票给您。