【问题标题】:Method Overriding with reference passed as argument使用作为参数传递的引用的方法覆盖
【发布时间】:2017-08-12 05:31:42
【问题描述】:

这个问题是基于当我存储孩子的引用时的概念 类到父类变量中。并且,使用该变量,我调用两个类中存在的方法 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();
    }
}

预期输出:“孩子” 实际输出:“孩子”[如预期的那样]

但是,

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”?

【问题讨论】:

    标签: inheritance parameter-passing overriding object-reference reference-parameters


    【解决方案1】:

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

    希望清楚。

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 2013-03-27
      • 2012-11-13
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2016-12-31
      相关资源
      最近更新 更多