我在弄清楚有关Java继承的内容时遇到了一些麻烦。我以为这很简单,但这让我很困惑。
我有这个超类。
public class MyItem {
private String barCode;
private String price;
public String getBarCode() {
return barCode;
}
public void setBarCode(String barCode) {
this.barCode = barCode;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
我有这两个子类
public class PromotionalItem extends MyItem {
private String promotion;
public String setPromotion(String promotion) {
this.promotion = promotion;
}
public void getPromotion() {
this.promotion = promotion;
}
}
public class SellableItem extends MyItem {
private String quantity;
public String setQuantity(String quantity) {
this.quantity = quantity;
}
public void getQuantity() {
this.quantity = quantity;
}
}
现在我有一种方法想要通用化,我认为像这样的方法可以工作...
public void processItem(MyItem item){
if(item.getClass().isAssignableFrom(PromotionalItem.class)){
processPromotionalItem((PromotionalItem)item);
}
else{
processSellableItem((SellableItem)item);
}
}
但是,当我尝试将这些项目强制转换为它们各自的子类时,我得到了ClassCastException。我认为这样的事情是可行的。我想念什么吗?这样的替代方法是什么?
该代码看起来像一个反模式。我要做的是在MyItem中有一个名为process的抽象方法,并且两个子类都实现了该方法:
public class MyItem {
private String barCode;
private String price;
public String getBarCode() {
return barCode;
}
public void setBarCode(String barCode) {
this.barCode = barCode;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public abstract void process();
}
现在,如果您有一个子类,则必须执行该过程方法,然后可以直接调用该过程方法,而不必检查它是什么类。
public void processItem(MyItem item){
item.process();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句