让我们假设我有一个抽象类:
public abstract class Customer {
private int price;
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public abstract void pay(int n);
public abstract void occupySpace();
}
我还有两个继承它的类:
HandicappedCustomer
,我想将价格设置为0。RegularCustomer
,我想将价格设置为100。现在,如果我创建每个类的实例并调用getPrice()
,我将返回0。当我为类的每个相应实例调用getPrice()
时,使它返回0和100的最简单方法是什么?
当我尝试在setPrice(100)
课程中调用RegularCustomer
时,我发现它不起作用。说白了,我想在我的主要代码中使用以下代码:
Customer a = new HandicappedCustomer();
Customer b = new RegularCustomer();
System.out.println(a.getPrice());
System.out.println(b.getPrice());
让它回归:
0
100
答案 0 :(得分:4)
如果您希望getPrice
始终为普通客户返回100,始终为残障客户返回0,您可以写
class RegularCustomer extends Customer {
public int getPrice() {
return 100;
}
}
class HandicappedCustomer extends Customer {
public int getPrice() {
return 0;
}
}
但由于您在设计中加入了setPrice
,因此并不完全符合您的要求(至少对于普通客户而言)。听起来你想要最初返回这些值。在那种情况下:
class RegularCustomer extends Customer {
public RegularCustomer() {
setPrice(100);
}
}
和
class HandicappedCustomer extends Customer {
public HandicappedCustomer() {
setPrice(0);
}
}
应该这样做。
如果您想稍后更改它们,它们都将继承setPrice
,并且它们都将继承getPrice
,因此一切都应按预期工作。