【发布时间】:2019-01-25 12:17:37
【问题描述】:
我想知道为什么 Java 使用 mA() 方法而不是 im(b) 方法调用子类方法。 我真的看不出它这样做的任何原因。 Java 如何决定调用哪个方法?
public class C {
public static void main(String[] args) {
A a = new B();
B b = new B();
a.mA(); // prints BmA
a.im(b); // prints Aim -- Why not Bim?
b.im(a); // prints Aim -- Why not Bim?
}
}
public class A {
public void mA() {System.out.println("AmA");};
public void im(A a) {System.out.println("Aim");};
}
public class B extends A {
public void mA() {System.out.println("BmA");};
public void im(B b) {System.out.println("Bim");};
}
我希望 im(b) 的行为类似于 mA()。
【问题讨论】:
-
ehm ... 不,如果要调用 im(B b),则需要在声明为 B 元素的变量上调用它。 a 可能被实例化为一个,但它仍然被声明为 A 的一个元素
-
@Stultuske 是的,我知道,但我想知道如果我将 Java 声明为 B,为什么会这样做。
-
@DanielF.M.因为在那里你传递了一个 A,而在 B 中的方法中,你期望 B 类型之一。你没有重写,而是重载了你的方法
-
@Lino 为什么 b.im(a) 不打印'Bim'呢? Java 知道 A a 是 B 的一个实例,因此我希望 b.im(a) 打印 'Bim'。
-
@DanielF.M.因为该方法需要一个 B 的实例作为参数,但您传递了一个 A 的实例
标签: java inheritance overloading