以引用作为参数传递的方法重写
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.
的方法
希望清楚。
这个问题是基于当我存储 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.
的方法希望清楚。