【发布时间】:2018-05-24 09:54:02
【问题描述】:
我们直接上代码:
父亲.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");
}
}
儿子.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))它从父类调用方法,因为 o2 是 Son 类型。反正我能得到想要的答案吗?
提前致谢
P.S.:实际上,我想从父类内部调用(子类的)方法 Print。有可能吗?
【问题讨论】:
-
您从
Father调用该方法,就像您从o1实例调用它一样。 -
@Seelenvirtuose 是的,这是一个错误,但不,这不是唯一的错误。 Eran 的答案是正确的。
-
不相关:在 java 中,方法名称采用驼峰式,而不是 C# 中的大写。不遵循这样的约定会让你的读者感到困惑。
标签: java class methods overriding inherited