aid*_*eno 1 java polymorphism inheritance hashmap map
我有一个名为的类Pizza,如下所示:
public class Pizza extends MenuItem
{
private final String base;
public String getBase()
{
return base;
}
}
Run Code Online (Sandbox Code Playgroud)
我的基类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
Run Code Online (Sandbox Code Playgroud)
为什么我不能pizza在这里用来调用getBase()?
因为你已经将pizza变量声明为MenuItem,而不是Pizza.因此,您需要输入它的参考MenuItem,并且您只能使用这些MenuItem方法.既然getBase是由提供Pizza,不是MenuItem,你不能在不做更多事情的情况下使用它.
如果您更改此行:
MenuItem pizza = (itemsMap.get("1"));
Run Code Online (Sandbox Code Playgroud)
至
Pizza pizza = itemsMap.get("1");
Run Code Online (Sandbox Code Playgroud)
(那些最外面()没有做任何事情)然后你可以使用getBase.
如果itemsMap声明为Map<String, MenuItem>,你需要一个演员:
Pizza pizza = (Pizza)itemsMap.get("1");
Run Code Online (Sandbox Code Playgroud)
甚至是警卫:
MenuItem mi = itemsMap.get("1");
if (mi instanceof Pizza) {
System.out.println(((Pizza)mi).getBase());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |