class Base { // <static> void speak() { // System.out.println("Base"); // } } class Sub extends Base { <static> void speak() { System.out.println("Sub"); } } public class Test9{ public static void main(String argv[]){ Base b = new Sub(); // m b.speak(); //编译时b会试图去调用Base的speak()方法, //但是Base无speak()方法,所以出错 } } 但是如果去掉Base中的注释,则实际运行的结果却是输出Sub, 即它并没有调用父类的speak(),这就是动态绑定了,即编译的时候它检查的是父类的方法,运行的时候调用的却是子类的方法! |
如果方法声明为 <static>则调用父类的,因为static方法是不能override的,只是隐藏了 |
16>>4=1 or 0? 当然不是0!! 相当于16除以2的4次方,得1啊,哈哈 | …0001 0000 >>4 …0000 0001 |