关于多态,后期绑定的疑问
Thinking in Java里面有这样一句话
“除了static和final方法外,其他方法都是后期绑定”
也就是说static和final方法都是前期绑定的咯?
看下面的这段src
import java.util.Random;
class A {
public void test() {
System.out.println( " A " );
}
}
class B extends A {
public void test() {
System.out.println( " B " );
}
}
class C extends A {
public void test() {
System.out.println( " C " );
}
}
public class Test {
private static final void test( A a ) {
a.test();
}
public static void main(String[] args) {
Random rand = new Random();
int i = rand.nextInt( 2 );
B b = new B();
C c = new C();
Test t = new Test();
if ( i == 0 ) {
Test.test( b );
} else {
Test.test( c );
}
}
}
Test.test()是static final的,前期绑定?
但执行结果不是“A”,而是“B”或“C”
是不是我理解错了...
------解决方案--------------------Test.test()是静态绑定的,但A,B,C中的test()方法都是动态绑定的。你现在是在用一个静态绑定的方法去调用一个动态绑定的方法,动态绑定是发生在A,B,C中的test(),而不是发生在Test中的test()。
------解决方案--------------------请注意,Test.test中的A a是后运行期间传入的,所以这个例子是说明后期绑定的。
静态绑定是不能继承和修改的。