 | sunweiqin | | 
 威望: 0 级别: 高级天王 [荣誉] 魅力:  经验:  现金: 1128 发文章数: 171 篇 注册时间: 2016-09-12
|
|
可以用反证法来推导。假定允许成员方法同时用static和abstract修饰符一起来修饰。
下面的Sample类有一个抽象的静态方法m1()和实例方法m2(),Sub子类实现了这两个方法:
public abstract class Sample{
public static abstract void m1();
public abstract void m2();
}
public class Sub extends Sample{
public static void m1(){...}
public void m2(){...}
}
下面这段代码分别调用m1()和m2()方法:
Sample s=new Sub();
s.m1();
s.m2();
以上s.m2()方法是实例方法,按照JVM动态绑定机制,和Sub实例的m2()方法绑定,因此可以被执行。
以上s.m1()方法是静态方法,按照JVM静态绑定机制,和Sample类的m1()方法绑定,而Sample类的m1()方法是抽象方法,无法被执行。
综上所述,如果静态方法被声明为抽象的,这将和Java虚拟机的绑定机制相矛盾,因此不允许static和abstract修饰符连用。
|
|
|