Переопределение метода со ссылкой, переданной в качестве аргумента

Этот вопрос основан на концепции, что когда я сохраняю ссылку на дочерний класс в родительской переменной класса. И, используя эту переменную, я вызываю метод, который присутствует в обоих классах Child-Parent.Here, дочерний метод должен вызываться, и он но этого не происходит, когда я передаю ссылку в качестве параметров, почему?

class Parent 
{
public void show()
    {
    System.out.println("Parent");
    }
}

class Child extends Parent
{
    public void show()
    {
    System.out.println("Child");
    }
}

public class Call {
    public static void main(String args[])
    {
    Parent p=new Child();
    p.show();
    }
}

Ожидаемый результат: "Child" Фактический результат: "Child" [как и ожидалось]

Но,

class Parent 
{
public void show(Parent x)
    {
    System.out.println("Parent");
    }
}    
class Child extends Parent
{
public void show(Child x)
    {
    System.out.println("Child");
    }
}

public class Call {
public static void main(String args[])
    {
    Parent p=new Child();
    p.show(new Child());
    }
}

Почему вывод "Родитель" в этом случае?

1 ответ

Решение

Это связано с тем, что во втором примере child не переопределяет метод show. Поэтому, когда вы вызываете p.show(new Child()), он фактически вызывает метод родительского класса, а не child.

Надеюсь, это понятно.