当前类 同一package 子孙类 其他package 
        public     √       √         √      √ 
        protected  √       √         √      × 
        friendly   √       √         ×      × 
        private    √       ×         ×      ×
        不写时默认为friendly 

解决方案 »

  1.   

    java中访问修饰符public、private、protecte、default的意义讲解:
    public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
    private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
    protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
    default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问
      

  2.   

    friendly就是默认的意思,没有写访问修饰符。
      

  3.   

    认真看, 我问的问题是关于不同类的static方法对protected成员方法的访问。面向对象首先要确定模型, 不考虑具体实现的情况下, 继承+访问权限的模型到底如何画?
      

  4.   


    访问权限没有这样简单吧.
    比如:package a;
    public class Base
    {
    void def()
    {
    System.out.println("The default mothod of the base class.");
    }
    }
    package a;
    public class Derived extends Base
    {
    public static void main(String[] args)
    {
    Derived dr = new Derived();
    dr.def();//888888correct8888888

    }package b;
    import a.Base;
    public  class Derived2 extends Base
    {
    public static void main(String[] args)
    {
    Derived2 dr2 = new Derived2();
    dr2.def();//********error*************
    }
    }
    package a;
    public class Another
    {
    public static void main(String[] args)
    {
    Derived dr3 = new Derived();
    dr3.def();//************correct**********
    }
    }
    这里涉及到外部接口和内部接口的问题