这个问题是基于这样一个概念:当我存储子级的引用时 类转换为父类变量。并且,使用该变量,我调用两个类中都存在的方法 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());
}
}
为什么在这种情况下输出是"父"?
这是因为在第二个示例中,孩子实际上并没有覆盖 show 方法。所以当你调用p.show(new Child(((时,它实际上调用父类的方法而不是子类的方法。
希望清楚。