У меня есть класс под названием 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 reference
MenuItem pizza = (itemsMap.get("1"));
System.out.println(pizza.getBase());//Problem is in this line
Почему я не могу использовать pizza
для вызова getBase()
?
Потому что вы pizza
переменную pizza
как MenuItem
, а не Pizza
. Таким образом, ссылка, которую вы имеете на это, набирается MenuItem
, и вы можете использовать только методы MenuItem
. Поскольку getBase
предоставляется Pizza
, а не MenuItem
, вы не можете использовать его, не делая ничего более.
Если вы измените эту строку:
MenuItem pizza = (itemsMap.get("1"));
в
Pizza pizza = itemsMap.get("1");
(эти outermost ()
ничего не делали), то вы можете использовать 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());
}
MenuItem Pizza
на Pizza Pizza
, но не понял, что мне понадобится этот состав из-за объявления карты. Благодарю.
()
вMenuItem pizza = (itemsMap.get("1"));
не имеют никакой функции вообще. Это точно так же, какMenuItem pizza = itemsMap.get("1");