JAVA有四种访问控制权限:public、protected、friendly(default)、private.

这四种权限的作用于如下:


                           当前类      同一package       子孙类     


                   Y                   Y                  Y               Y


               Y                   Y                  Y               N


   Y                   Y                  N               N


                  Y                   N                  N               N


不写时默认是friendly.


怎么理解呢?


如果一个成员方法或成员变量或内部类名前 使用了 private 访问控制符,那么这个成员只能在这个类的内部使用。


friendly: 如果一个成员方法或成员变量名前没有使用任何访问控制符,就称这个成员所拥 有的是默认的( default )访问控制符。默认的访问控制成员可以被这个包中的其它类 访问(同一包中的任何类)。如果一个子类与其父类位于不同的包中,子类也不能访问父类中的默认访问控 制成员。(所以它是针对同一包,不针对子孙类)。


protected: 如果一个成员方法或成员变量名前使用了 protected 访问控制符,那么这个成员既 可以被同一个包中的其它类访问通过new实例化该类后调用,也可以并只可以被不同包中的子类覆写或直接调用而非实例化访问访问。(同一包类+子孙类)


public: 如果一个成员方法或成员变量名前使用了 public 访问控制符,那么这个成员可以 被所有的类访问,不管访问类与被访问类是否在同一个包中。


他是指该被访问控制权限修饰的成员的作用域。


比如在包1定义了public父类,子类。那么该子类可以访问和覆写的该父类的public/protected/friendly修饰的成员(方法、变量、类)。而在包2内的类中实例化一个包1的子类,也不可以访问它的或它父类的friendly即protected修饰的成员,但可以继承它而访问或覆写protetcted修饰的成员.在子孙类中并不是指new出来访问而是指直接访问。


构造器也有访问控制权限,但无返回值类型。



类修饰关键词:

修饰类只能:public,abstract,final.不加修饰即为friendly类.

只有修饰为public的类,别的包的类才可以继承或者引用这个类.定义为abstract,final以及不加修饰的类,别的包的类无法继承以及引用这个类.

变量,方法修饰关键词:

public修饰的变量以及方法,任何类都可以访问,只要别的类有权限访问本类.
private修饰的方法,只有类内部才可以访问,别的类即使new了一个含有private的的class,也不可以访问private类,这样的话,A类中的private方法,无论A类是什么类型,别的类都无法访问A类的private方法,即使别的类 A a=new A();也不可以采用如下方法访问Private方法:a.privateMethodName();protected修饰的方法,同样不可以采用a.proctedMethodName()访问.private修饰的方法变量,只有B类继承了A类,才能使用super.proctedMethodName()访问.friendly修饰的方法,对别的包的类来说都是不可访问的