我有一个名为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()
?
答案 0 :(得分:6)
因为您已将pizza
变量声明为MenuItem
,而不是Pizza
。因此,您输入的引用是MenuItem
,您只能使用MenuItem
方法。由于getBase
由Pizza
而不是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());
}