如何在Java中访问特定的子类方法?
问题描述:
您好我有一个类物业和2个亚类店和公寓。如何在Java中访问特定的子类方法?
在另一类我有属性的与商店和公寓的混合物的ArrayList。我的代码:
for(Property prop: properties){
if(prop.getClass().equals(Shop.class))
prop.setShopDetails(detail);
else
prop.setAppDetails(detail)
}
如何访问方法setShopDetails()店类的内部?
答
你需要转换prop
到Shop
:
for(Property prop: properties){
if(prop.getClass().equals(Shop.class))
((Shop) prop).setShopDetails(detail);
else
((Apartment) prop).setAppDetails(detail)
}
}
一个更好的办法,但是,这是在Property
类中定义的抽象方法setDetails
并在每个子类中有不同的实现它。您可能还想使用prop instanceof Shop
而不是prop.getClass().equals(Shop.class)
。
答
首先,事实上,你必须调用在这种情况下getClass()
通常表明设计缺陷。您可能想要有一个由子类覆盖的单个abstract
setDetails
方法。
你所追求的是“铸造”的语言特性。调用子类方法之前,你想投你Property
像这样:
((Shop)prop).getShopDetails(detail);
答
首先,考虑prop
是Shop
一个子类的情况。你的条件将返回false
!这是使用instanceof operator的最佳时机。
为了访问这些方法,您需要将对象转换为正确的子类:
if(prop instanceof Shop) {
Shop s = (Shop) prop;
s.setShopDetails(details);
} else {
// you get the idea
}
然而,这种失败的多态性的目的。为什么不在Property
中创建setDetails
方法,并允许子类如何处理它?
感谢您的帮助。 – Qor 2012-04-22 19:03:14