Вызов метода из дочернего класса - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь что-то вроде этого:

public class Dog {
}

public class Cat extends Dog {
    private void mew() {
    }
}

Dog d = new Dog();
d.mew();

Во время выполнения d будет содержать объект cat из-за других методов, но я не могу скомпилировать.

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Это наоборот.

Dog является родительским классом, поэтому он фактически не знает, что какой-то класс Cat расширяет его, и он не знает о методах классов, расширяющих его.

Однако Cat расширяет Dog и знает обо всех не приватных методах Dog + своих собственных методов.

То есть вы не могли позвонить mew() с Dog.

0 голосов
/ 07 мая 2018

Используйте интерфейс, который определяет методы для «Камня», а затем используйте различные реализации для NormalStone или SpecialStone. Смотрите мой пример:

public interface Stone {
    int getValue(); 
}

public class NormalStone implements Stone {

    @Override
    public int getValue() {
        return 1;
    }
}

public class SpecialStone implements Stone {


    @Override
    public int getValue() {
        return 100;
    }
}

public class Game {

    public static void main(final String[] args) {
        final List<Stone> stones = new ArrayList<>();
        stones.add(new NormalStone());
        stones.add(new SpecialStone());

        for (final Stone stone : stones) {
            System.out.println(stone.getValue());
        }

    }
}
0 голосов
/ 07 мая 2018

In должен инициализировать Dog с Cat экземпляром (или Stone с SpecialStone экземпляром):

Stone s = new SpecialStone();

Затем вы можете вызвать метод на вашем SpecialStone (Это может работать, только если вы инициализируете родительский класс дочерним классом):

if (s instanceof SpecialStone) {
   (SpecialStone)s.specialMethod();
}

Другим способом является использование полиморфизма:

public class Stone {
   public void specialMethod() {

   }
}

public class SpecialStone {
   @Override
   public void specialMethod() {
   }
}

Но это добавит specialMethod к каждому экземпляру Stone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...