假设我有这些类:
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
也
static void call(A a) { System.out.print("A"); }
static void call(B b) { System.out.print("B"); }
public static void main(String[] args) {
A a = new A();
A b = new B();
call(a);
call(b);
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:AA
虽然我在期待:AB
我想知道为什么?
Pra*_*kar 10
我想知道为什么?
A.b是A.稍微解释一下,
A b = new B();
Run Code Online (Sandbox Code Playgroud)
这一行意味着引用变量b引用类的对象,B但它是类型的,A并且根据上面的规则,编译器在编译时只知道call要调用的方法应该是类A
编辑:按照Subhrajyoti的建议.正如Subhrajyoti正确地说,这是编译时多态性.