-1

这段代码有什么问题?考虑构建一个包含所有建筑物的 ArrayList,而 Building 是 Farm 和 StoneMine 的超类:

public Building returnBuilding(int i)
{
    if(buildings.get(i) instanceof Farm)
        return (Farm)buildings.get(i);
    if(buildings.get(i) instanceof StoneMine)
        return (StoneMine)buildings.get(i); 
    else
        return null;
}   

那么如果我打电话

returnBuilding(1).SOMEMETHODEJUSTINFARMCLASS();

building.get(1)是 Farm 类的一个实例,我得到一个运行时错误

4

1 回答 1

1

returnBuilding返回 a Building,而不是 a Farm。在返回之前进行铸造game.buildings.get(i)并不会改变这一点。

如果运行时类game.buildings.get(i)is ,则在调用方法之前Farm将返回值转换为returnBuildingto 。FarmSOMEMETHODEJUSTINFARMCLASS

于 2013-04-25T12:46:07.540 回答