常见的访问修饰符的使用权限分类:

  类内部 本包 子类外部包 
public  √ √ √ √
protected √ √ √ ×
default (缺省) √ √ × ×
 private √ × × ×

其中,对于类的修饰,只能是 public 或者缺省。

对于方法和成员变更的修饰,public是最宽容的,比较难理解的是projected。

package a1;

public
class ProTest { protected void say(){ System.out.println("Proteced say"); } public void laugh(){ System.out.println("Protest laugh"); } }

对于不在同一个包的类:是无法访问protected修饰的say()方法的,但可以访问 laugh();

对于子类若不在同一个包中,只能在本类中访问父类的protected方法

package a2;

import a1.ProTest;

public class Tester {
    public static void main(String arg[]){
        ProTest p = new ProTest();
        p.laugh();//ok
        p.say();//编译器提示无法访问
    }
}

package a2;


public class Effect extends ProTest {

    public static void main(String args[]){
        ProTest p = new ProTest();
        p.say();// ok
     } }
01-12 16:58