我有以下类Rocket
,我想为它创建子类,让我们说“U1”和“U2”。
现在U1和U2都有:
如何在父类Rocket中声明规范并在子类U1和U2中赋予它们值?
或者我应该在子类中重新声明每个子类的值,并在父类中跳过声明它们?
答案 0 :(得分:0)
类似这样的内容:Rocket
类具有受保护的 cost, weight, maxWeight
属性。 U1
和U2
扩展它并使用自己的 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
}
}
这样,您可以使用父类中的值,并在子类中设置值。
虽然你的问题不是很清楚所以我不希望这是你需要的答案。请确保您按照问题中的链接和评论了解有关社区的更多信息。
另外,如果您认为答案是正确的,请将我的答案投票给您。