我正在用 Java 尝试这段代码,但结果输出我不清楚有人可以解释以下输出的原因吗

问题描述

下面是我试图运行的代码。如果我从 func() 方法删除参数而不是 obj.func() 调用 B 类方法,但如果我引入参数,它会调用 A 类方法

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???
}}

解决方法

我想您正在尝试覆盖类 B 中 A 类的方法 func。无论如何,您的代码正在重载该方法,因为A.funcB.func 的参数类型不同。前者接收A类型的对象obj,而第二个接收B类型的对象obj

public class A {
    void func(A obj) {
        System.out.println("in A");
    }
}

public class B extends A{
    void func(B obj) { // your solution,which creates a DIFFERENT method using overloading
        System.out.println("OVERLOAD in B");
    }
    void func(A obj) { // proper override of *A.func(A obj)*
        System.out.println("OVERRIDE in B");
    }
} // <- pay attention,you forgot this bracket
 
public static void main(String[] args) {
    A obj = new B();
    obj.func(null);// now it calls the right method
}}

如果去掉func的参数,这两个函数是相同的,因此你有一个适当的覆盖。这就是为什么删除参数代码正常工作的原因。

我希望我能帮到你,无论如何你可以在这里找到更多信息:

祝您有美好的一天!