1

这个问题是基于这样的概念,即当我将子类的引用存储到父类变量中时。并且,使用该变量,我调用了 Child-Parent 两个类中都存在的方法。这里应该调用子方法并且确实如此但是当我将引用作为参数传递时不会发生这种情况,为什么?

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

预期输出:“儿童” 实际输出:“儿童”[如预期]

但,

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

为什么在这种情况下输出是“父母”?

4

1 回答 1

0

这是因为在第二个示例中,孩子实际上并没有覆盖 show 方法。所以当你调用 p.show(new Child()) 它实际上调用父类的方法而不是子类。

希望很清楚。

于 2017-08-12T06:38:29.733 回答