首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于多态,后期绑定的疑问解决方案

2012-02-06 
关于多态,后期绑定的疑问ThinkinginJava里面有这样一句话“除了static和final方法外,其他方法都是后期绑定”

关于多态,后期绑定的疑问
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是后运行期间传入的,所以这个例子是说明后期绑定的。
静态绑定是不能继承和修改的。

热点排行