这个问题在这里已经有答案了:
为什么在本例中不调用子类方法,而在java的动态多态性中调用它(4个答案)
15天前关门了。
下面是我试图运行的代码。如果我从func()方法中删除参数,则obj.func()调用b class方法,但如果我引入参数,则它调用class方法。
public class A {
void func(A obj) {
System.out.println("in A");
}
}
public class B extends A{
void func(B obj) {
System.out.println("in B");
}
public static void main(String[] args) {
A obj = new B();
obj.func(null);// calls A class method, but why???
}}
1条答案
按热度按时间bpsygsoo1#
我想您正试图重写类b中类a的方法func。无论如何,您的代码正在重载该方法,因为a.func和b.func的参数类型不同。前者接收类型为a的object obj,而第二个接收类型为b的object obj。
如果删除func的参数,则这两个函数是相同的,因此具有适当的重写。这就是为什么删除参数代码工作正常。
我希望我能帮助你,无论如何你可以在这里找到更多信息:
方法重载,这就是您以前的代码所做的:https://www.javatpoint.com/method-overloading-in-java
方法重写,这是您的目标:https://www.javatpoint.com/method-overriding-in-java
运行时多态性,这就是编写obj=new b()时发生的情况;https://www.javatpoint.com/runtime-polymorphism-in-java
祝您今天过得愉快!