Как использовать метод класса-наследника, которого нет в классе-родителе?

Почему когда я пытаюсь у класса - наследника вызвать метод, которого нет в классе-родителе вылезает ошибка? При создании объекта нужно использовать полиморфизм.

public class Main{
    public static void main(String[] args) {
        Person man = new Man(); //polymorphism
        man.sayHello();         //hello
        man.doSomething();      //error
    }
}
class Person {
    void sayHello(){
        System.out.println("hello!");
    }
}
class Man extends  Person{
    void doSomething(){
        System.out.println("it is doing something");
    }
}

Ответы (2 шт):

Автор решения: PipoFlippo

Потому что в классе родителя нет этого метода. Ты создаешь переменную типа Person в которую кладешь объект Man. Person знает только унаследованные методы

Просто создай метод в Person

void doSomething(){
        System.out.println("AAAAAAAAAA");
    }

И посмотри тогда , что напечатает man.doSomething()

→ Ссылка
Автор решения: Roman C

Ошибка возникает по причине того что у класса-родителя Person нет метода doSomething()

man.doSomething();      //error
    }

Если непонятно как работает наследование, то попробуй объявить переменную типа класса-родителя.

Man man = new Man(); 

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

Чтобы лучше понять что такое полиморфизм рекомендую почитать Как на практике применяется полиморфизм?.

→ Ссылка