我们直接看代码:
父亲.java:
public class Father {
public void DoSmth(Father object) {
// Do something else and print
Print(object);
}
public void Print(Father object) {
System.out.println("Father");
}
}
Son.java:
public class Son extends Father {
public void Print(Son object) {
System.out.println("Son");
}
}
Main.java:
public class Main {
public static void main(String[] args) {
Father o1 = new Father();
Son o2 = new Son();
o1.DoSmth(o1);
o1.DoSmth(o2);
}
}
所以,我想得到:
Father
Son
但是,我得到:
Father
Father
我真的不太明白为什么(对于o1.DoSmth(o2))它从Father类调用该方法,因为o2是Son类型。无论如何我可以获得想要的答案吗?
提前致谢
P.S.:实际上,我想从 Father 类内部调用(Son 类的)方法 Print。可能吗?
最佳答案
public void Print(Son object)
不覆盖 public void Print(Father object)
。它重载了。
也就是说,DoSmth(Father object)
在这两种情况下都在 Father
上执行实例,所以它会调用 public void Print(Father object)
的Father
类即使Son
类确实覆盖了它。
如果您更改Son
类方法:
@Override
public void Print(Father object) {
System.out.println("Son");
}
并更改您的 main
至:
public static void main(String[] args) {
Father o1 = new Father();
Son o2 = new Son();
o1.DoSmth(o1);
o2.DoSmth(o2);
}
您将得到输出
Father
Son
关于java - (Java) 如何从父类(super class)调用重写的 "inherited"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506288/