问题是什么,哪些方法在Java中动态绑定?
来自C ++,如果我没有弄错的话,大多数方法都是静态绑定的,只有少数例外。
答案 0 :(得分:3)
实例方法调用在运行时解析,静态方法调用在编译时解析。
答案 1 :(得分:3)
理论上,除了
之外,所有方法都是动态绑定的实际上,在运行时,JVM可以选择JIT编译一些静态解析的方法调用,例如,如果没有包含重写方法的已加载类。
答案 2 :(得分:0)
一般来说,你可以把它想象成这样: 在编译时,编译器检查静态绑定。 在运行时,检查dinamic类型。
例如:
Class A{
public void function x(){ print("x"); }
}
Class B extends A{
public void function x(){ print("y"); }
public void function m(){ print("m"); }
}
public static void main(){
A a = new B();
a.x(); //1
a.m(); //2
((B)a).m(); //3
}
*请注意,在最后一次转换的情况下,编译器只会检查继承的可能性,而不会检查是否存在B对象。 例如:
A a = new A();
((B)a).m();
将编译但抛出runntime异常。