谁能解释清楚abstract方法为什么不能同时是static,native,synchronized ?

解决方案 »

  1.   

    OK,
    第一abstract显然是与多态相关的,而static是静态的,
    public class A {
      public static void foo() {
        System.out.println("A");
      }
    }
    public class B extends A {
      public static void foo() {
        System.out.println("B");
      }
    }
    A a = new A();
    B b = new B();
    A c = new B();
    A.foo();
    B.foo();
    // 以下不推荐
    a.foo();
    b.foo();
    c.foo();
      

  2.   

    第二,abstract方法只是一个方法签名(可访问性、返回类型、方法名、参数表、异常)没有方法体,而native方法虽然在java代码中并没有方法体,但实际上它是有方法体的。
      

  3.   

    第三,synchronized是运行时的机制,与上面讲的方法签名无关
    假设可以abstract+synchronized
    public abstract class A {
      public abstract synchronized void foo();
    }
    public class B extends A {
      public abstract void foo() {
        // 我就不同步,汝之奈何
      }
    }
    子类跟你唱反调,你抽象父类中声明的synchronized,一点用也没有
      

  4.   

    另外,abstract还不能和final private等矛盾的字眼同时出现
      

  5.   

    呵呵,只清楚一点static修饰的方法属于当前类,表明这个方法可以通过类来调用,如果这个方法同时被定义成抽象的 ,那个当通过类来调用这个方法时出现错误(调用了一个没有方法体的方法肯定引起错误).
      

  6.   

    看我这篇文章:
    http://blog.csdn.net/yidinghe/archive/2009/03/02/3946967.aspx