为什么我不能在我从HashMap获取的对象上使用其他类的公共方法?

时间:2014-08-24 15:49:38

标签: java inheritance map hashmap polymorphism

我有一个名为Pizza的课程,如下所示:

public class Pizza extends MenuItem
{ 
    private final String base;

    public String getBase()
    {
        return base;
    }
} 

我的基类MenuItem有一个名为addItem()的方法,如下所示:

 public static void addItem(String menuItemNumber, MenuItem menuItem)
    {
        itemsMap.put(menuItemNumber, menuItem); //itemsMap is a class HashMap
        itemsSet = itemsMap.entrySet();
        System.out.println(itemsSet); //this prints the object's reference
        MenuItem pizza = (itemsMap.get("1"));
        System.out.println(pizza.getBase());//Problem is in this line

为什么我不能在这里使用pizza来调用getBase()

1 个答案:

答案 0 :(得分:6)

因为您已将pizza变量声明为MenuItem,而不是Pizza。因此,您输入的引用是MenuItem,您只能使用MenuItem方法。由于getBasePizza而不是MenuItem提供,因此您无法在不执行其他操作的情况下使用它。

如果您更改此行:

MenuItem pizza = (itemsMap.get("1"));

Pizza pizza = itemsMap.get("1");

(那些最外面的()没有做任何事情)然后你可以使用getBase

如果itemsMap被声明为Map<String, MenuItem>,则您需要投射:

Pizza pizza = (Pizza)itemsMap.get("1");

甚至是警卫:

MenuItem mi = itemsMap.get("1");
if (mi instanceof Pizza) {
    System.out.println(((Pizza)mi).getBase());
}