它是编译时多态还是运行时?

时间:2014-01-07 15:21:28

标签: java

如果我们在不使用超类的引用变量的情况下调用子类的重写方法,那么它是运行时多态吗?

1 个答案:

答案 0 :(得分:0)

是的,它会的。 Java对象根据运行时的值类型“决定”要调用的方法版本,而不是编译时变量的值。

考虑以下课程:

public class A {
    public String foo() {
        return "A";
    }
}

public class B extends A {
    public String foo() {
        return "B";
    }
}

foo()的所有以下调用都将返回"B"

// compile-time type is A, runtime type is B
A a=new B();
a.foo();

// compile-time type is B, runtime type is B
B b=new B();
b.foo();

// compile-time type is B, runtime type is B
new B().foo();