如何在Java中访问特定的子类方法?

问题描述:

您好我有一个类物业和2个亚类公寓如何在Java中访问特定的子类方法?

在另一类我有属性的与商店和公寓的混合物的ArrayList。我的代码:

for(Property prop: properties){ 
    if(prop.getClass().equals(Shop.class)) 
     prop.setShopDetails(detail); 
    else 
     prop.setAppDetails(detail) 
} 

如何访问方法setShopDetails()店类的内部?

你需要转换propShop

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)

+0

感谢您的帮助。 – Qor 2012-04-22 19:03:14

首先,事实上,你必须调用在这种情况下getClass()通常表明设计缺陷。您可能想要有一个由子类覆盖的单个abstractsetDetails方法。

你所追求的是“铸造”的语言特性。调用子类方法之前,你想投你Property像这样:

所有的

((Shop)prop).getShopDetails(detail);

首先,考虑propShop一个子类的情况。你的条件将返回false!这是使用instanceof operator的最佳时机。

为了访问这些方法,您需要将对象转换为正确的子类:

if(prop instanceof Shop) { 
    Shop s = (Shop) prop; 
    s.setShopDetails(details); 
} else { 
    // you get the idea 
} 

然而,这种失败的多态性的目的。为什么不在Property中创建setDetails方法,并允许子类如何处理它?