Я изучаю Java, пытаясь понять наследование. Я не мог понять, почему переопределенный метод выполняется в подклассе walk(), но не в другом методе xyz().Почему я не могу вызвать метод подкласса, используя ссылку родительского типа, которая ссылается на экземпляр подтипа?
class Person{
public void walk() { System.out.println("walking like a person "); }
}
public class Soldier extends Person{
@override
public void walk() { System.out.println("marching like a soldier "); }
public void xyz() { System.out.println("xyzng like a pro"); }
public static void main(String[] args) {
Person sp = new Soldier();
sp.walk();
sp.xyz();
}
}
Вот мой вопрос, если метод следующий вызов отлично работает и вызывает метод Soldier ходьбы,
sp.walk();
почему компилятор жалуются на этот вызов?
sp.xyz();
Поскольку 'sp' гарантированно будет тип Person, а не солдат, поскольку это также правильный код' Человек зр = new Person(); ' –