Учитывая следующее:Переопределенный вызов метода в родительском методе
public class Child extends Parent{
public boolean isMeh(){
return true;
}
public void childMethod() {
System.out.println("child: "+isMeh());
}
public static void main(String... args){
Child child = new Child();
child.parentMethod();
child.childMethod();
}
}
class Parent{
public boolean isMeh(){
return false;
}
public void parentMethod() {
System.out.println("parent: "+isMeh());
}
}
Выход:
parent: true
child: true
Это довольно очевидно, когда isMeh() вызывается в классе ребенка, он вызывает метод замещения.
Но когда метод overriden вызывается внутри метода объекта parent, он по-прежнему вызывает метод дочернего объекта.
Я вижу, что мы создаем один дочерний объект, а parentMethod просто наследуется, поэтому, когда мы вызываем isMeh(), он вызывает доступный (переопределенный).
В чем причина этой реализации в java?
Почему бы и нет? Когда вы вызываете что-то в качестве Ребенка, вызывается переопределенный метод. Однако, если вы говорите, что родительский p = новый Parent(); p.isMeh(); он просто вернет false. –
Простая вещь для понимания - это методы, вызываемые объектом и переменными на ссылке, поэтому всякий раз, когда я делаю родительский p = new parent(), вызывается родительский метод. –