以引用作为参数传递的方法重写

Method Overriding with reference passed as argument

这个问题是基于当我存储 child 的引用时的概念 class 转换为 parents class variable.And,使用该变量我调用 classes Child-Parent 中存在的方法。这里 child 方法应该被调用并且确实如此,但是当我将引用作为参数传递时却没有发生,为什么?

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());
    }
}

为什么在这种情况下输出是 "Parent"?

这是因为在第二个例子中 child 并没有完全覆盖 show 方法。因此,当您调用 p.show(new Child()) 它实际上调用的是 parent class 而不是 child.

的方法

希望清楚。