Вы можете вызвать метод для объекта, который реализует этот метод, при условии, что он доступен из вашего текущего класса. В частности, поскольку метод getRace
является открытым, любой класс может вызывать его, если у него есть соответствующий экземпляр Orc
или Human
для его вызова.
Я полагаю, что ваша проблема в том, что у вас есть список Karakter
с, а не орков или людей. Таким образом, Karakters
знает только в этот момент, что объект является Karakter
, и поэтому может вызывать только методы, определенные в Karakter
классе / интерфейсе.
Одним из решений является добавление метода getRace
к классу Karakter
. Если для этого не имеет смысла возвращать значение в суперклассе, то вы можете сделать суперкласс abstract (что означает, что вы не можете создать его экземпляр напрямую, вы можете создать только один из его подклассов). ) и объявите метод abstract в Karakter
тоже:
public abstract class Karakter
{
/*
...
... Same as before
...
*/
public abstract String getRace();
}
Это заставляет подклассы иметь реализацию getRace
(что в данном случае не является проблемой, поскольку они в любом случае) и означает, что Karakters
теперь может быть уверенным , независимо от того, какого рода Karakter
объекта, который он имеет, есть метод getRace () для вызова.
Это всего лишь один из подходов к решению, основанный на том, что я понимаю, что вы намерены быть. Но основная проблема в том, что класс Karakter
не определяет getRace
, и поэтому метод не может быть вызван напрямую для ссылок этого типа.