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