【发布时间】:2016-04-29 14:59:54
【问题描述】:
我正在扩展一个类,但我无法弄清楚为什么 JVM 只在运行时决定调用哪个方法。我的意思是当我做A obj=new B(); 时,B 中的方法会被调用不是很明显吗?
也许编译器并不明显,但我想知道细节。
代码如下:
class A
{
String getName(String name) {
return "super";
}
}
class B extends A
{
@Override
String getName(String name) {
return "sub";
}
}
public class Overload
{
public static void main(String args[]) {
A obj=new B();
System.out.println(obj.getName(null));
}
}
【问题讨论】:
-
这是一个非常特殊的情况。如果你写
A obj = getSomeA()怎么办? -
A obj=new B()-> 在这里您明确使用了B的实例。如果您正在调用第三方 api 并且您不知道它将返回什么类型的 Object 怎么办?例如 -List l = getAListOfSomething() -
@TheLostMind 所以它基本上是在运行时决定的对象类型?
-
@Amol 是的。你无法预测,只有运行时才能决定:)
标签: java polymorphism