我曾经在某处看到说,运行时多态是动态类型语言的结果。通过检查下面的代码,我们可以看到一个明显的运行时多态的例子。
class A{
do(){}
}
class B extends A{
do(){}
}
...
A ex = new B();
ex.do();
由于存在超类类型引用,编译器无法确定引用将实际引用哪种类型并在运行时绑定方法。但是对于下面使用相同类定义的情况呢?
我的第一个问题是针对下面的示例;
class A{
do(){}
}
class B extends A{
//no overriding
}
...
A ex = new B();
ex.do();
在继承关系中只有一个do()方法的版本。系统是否仍然需要在运行时绑定该方法?还是在编译时绑定?
我的第二个问题是关于下面的示例的:
class A{
do(){}
}
class B extends A{
do(){}
}
...
B ex = new B();
ex.do();
现在有一个子类(继承链中最低的)类型的引用。它会在运行时绑定吗?