尝试使用父类方法时Java调用子类方法

7 java inheritance

如果我有两个班,A和B,

public class A {
    public int test() {
        return 1;
    }
}

public class B extends A{
    public int test() {
        return 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:A a1 = new B(),则a1.test()根据需要返回2而不是1.这只是Java的一个怪癖,还是有这种行为的原因?

Tud*_*dor 5

这称为多态性.在运行时,将根据"实际"类型调用正确的方法a1,B在这种情况下.

正如维基百科所说的那样:

工业中多态性的主要用法(面向对象编程理论)是属于不同类型的对象响应同名的方法,字段或属性调用的能力,每个调用根据适当的类型特定行为.程序员(和程序)不必事先知道对象的确切类型,因此确切的行为是在运行时确定的(这称为后期绑定或动态绑定).


kos*_*osa 4

不,这是正确的(这是由于多态性)。所有方法调用都对对象进行操作,而不是对引用类型进行操作。

这里您的对象是类型,因此将调用 的B,测试方法。class B