R. *_*mes 2 java methods overriding class inherited
我们直接进入代码:
public class Father {
public void DoSmth(Father object) {
// Do something else and print
Print(object);
}
public void Print(Father object) {
System.out.println("Father");
}
}
Run Code Online (Sandbox Code Playgroud)
public class Son extends Father {
public void Print(Son object) {
System.out.println("Son");
}
}
Run Code Online (Sandbox Code Playgroud)
public class Main {
public static void main(String[] args) {
Father o1 = new Father();
Son o2 = new Son();
o1.DoSmth(o1);
o1.DoSmth(o2);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我想得到:
Father
Son
Run Code Online (Sandbox Code Playgroud)
然后,我得到:
Father
Father
Run Code Online (Sandbox Code Playgroud)
我真的不太明白为什么(对于o1.DoSmth(o2))它从父类调用方法,因为o2是Son类型.无论如何我能得到想要的答案吗?
提前致谢
PS:实际上,我想从Father类中调用Print(Son类)方法.可能吗?
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");
}
Run Code Online (Sandbox Code Playgroud)
并将你main改为:
public static void main(String[] args) {
Father o1 = new Father();
Son o2 = new Son();
o1.DoSmth(o1);
o2.DoSmth(o2);
}
Run Code Online (Sandbox Code Playgroud)
你会得到输出
Father
Son
Run Code Online (Sandbox Code Playgroud)