对于java中访问权限的理解与解析

来源:互联网 发布:免费天庭淘宝城txt下载 编辑:程序博客网 时间:2024/06/07 17:24

对于刚开始学习java的“程序员”来说,或者说是刚刚接触面向对象编程的人,对于四个访问权限的理解刚开始难免会有所困难,话不多说,进入正题,看我的总结:

1、首先呢,对于java的访问权限共有4个

private       默认default     protected     public

他们的权限范围也按照以上的顺序逐渐增大,解释一下默认default的类型,就是什么都不写,由系统默认


2、其次,用法:类前面允许使用两种,即 public 和 default(默认),类成员变量,类成员函数,实例成员变量,实例成员函数,4种都可以使用,都符合要求


3、理解:private (当前类访问权限)    default(包访问权限)   protected(子类访问权限)  public(公共访问权限)

private : 只允许被当前的类访问

default(默认)可以被当前的类,也可以被同一个包下的所有类访问

protected可以被当前的类访问,也可以被同一个包下的所有类访问,还可以被不同的包下的有继承实现关系的子类访问

public:可以被当前的类访问,也可以被同一个包的所有类访问,还可以被不同包下的类访问。。。。换言之,public 属于完全暴露,完全透明的权限。


4、文字看不懂,看看代码,帮助理解下。

被public修饰的类Persion1;

package encapsulation;public class Persion1 {private static int priVai;protected static  int proVai;public static  int pubVai;static int defaultVai;private static  void priTest(){System.out.println("我是一个私有(当前类访问权限)的方法!");}protected static  void proTest(){System.out.println("我是一个保护(protected子类访问权限)的方法");}public static  void pubTest(){System.out.println("我是一个public(公共访问权限)的方法");}static void defaultTest(){System.out.println("我是一个默认(包访问权限)的方法");}}
与Persion1在同一个包下;
package encapsulation;public class Persion2 {public static void main(String[] args) {Persion1 p = new Persion1();//可以看出在同一个包下,调用public修饰的类的成员(变量和方法)只有   私有的   变量和方法不能被调用//同一个包下可以访问3种System.out.println(p.proVai);System.out.println(p.pubVai);System.out.println(p.defaultVai);p.pubTest();p.proTest();p.defaultTest();}}
与Persion1在不同的包下;
package encapsulation2;import encapsulation.Persion1;public class Persion3 {public static void main(String[] args) {Persion1 p = new Persion1();//可以看出在不同的包下,调用     public修饰的类   的成员(变量和方法)只有   共有的(public)   变量和方法能被调用System.out.println(p.pubVai);p.pubTest();}}
与Persion1在不同的包下,但继承了Persion1,成为其子类;
package encapsulation2;import encapsulation.Persion1;public class Persion4 extends Persion1 {public static void main(String[] args) {//不同的包下,在有继承的关系的情况下,能访问public 和 protected 修饰的变量和方法//注意不要用父类的一个对象在这里调用,那是父类的作用域 问题!!!System.out.println(pubVai);System.out.println(proVai);pubTest();proTest();}}


Persion10是默认访问权限的class;

package encapsulation;class Persion10 {private static int priVai;protected static  int proVai;public static  int pubVai;static int defaultVai;private static  void priTest(){System.out.println("我是一个私有(当前类访问权限)的方法!");}protected static  void proTest(){System.out.println("我是一个保护(protected子类访问权限)的方法");}public static  void pubTest(){System.out.println("我是一个public(公共访问权限)的方法");}static void defaultTest(){System.out.println("我是一个默认(包访问权限)的方法");}}


和Persion10在同一个包下;
package encapsulation;public class Persion20 {public static void main(String[] args) {Persion1 p = new Persion1();//可以看出在同一个包下,调用public修饰的类的成员(变量和方法)只有   私有的   变量和方法不能被调用//同一个包下可以访问3种System.out.println(p.proVai);System.out.println(p.pubVai);System.out.println(p.defaultVai);p.pubTest();p.proTest();p.defaultTest();}}

和Persion10在不同的包下;
package encapsulation2;import encapsulation.Persion1;public class Persion30 {public static void main(String[] args) {Persion1 p = new Persion1();//可以看出在不同的包下,调用     public修饰的类   的成员(变量和方法)只有   共有的(public)   变量和方法能被调用System.out.println(p.pubVai);p.pubTest();}}


和Persion10在不同的包下,想继承Persion10 却不能(原因如下)
package encapsulation2;//以下的两行代码是错误的://import encapsulation.Persion10;//class Persion40 extends Persion10 {//}/*错误的原因:   The type encapsulation.Persion10 is not visible   default只是包的访问权限!! */ 
下面这个是一个简单的布局



这东西还是自己亲手试一下,脑海里立马就清楚了 ^   -   ^微笑微笑微笑





原创粉丝点击