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

对于刚开始学习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只是包的访问权限!!
 */
 

下面这个是一个简单的布局



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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值