重载和继承

Ean*_*n V 1 java oop

假设我有这些类:

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.
  • 重载方法在编译时绑定.所以在编译时只,编译器知道类A的方法是将被称为参考变量的类型bA.
  • 永远记住,在编译时根据变量的引用类型决定调用哪个重载方法

稍微解释一下,

A b = new B();
Run Code Online (Sandbox Code Playgroud)

这一行意味着引用变量b引用类的对象,B但它是类型的,A并且根据上面的规则,编译器在编译时只知道call要调用的方法应该是类A

编辑:按照Subhrajyoti的建议.正如Subhrajyoti正确地说,这是编译时多态性.

  • @JunedAhsan您的评论可能与我的重复...:D (3认同)
  • 它是编译时多态性 (2认同)