java 中的四种访问权限(public protected [default] private) 笔记

/*
note: 本文档说的一些内容都是方便大家记忆理解,而非歧视 ,请正确理解。

java 中的四种访问权限(public protected [default] private) 笔记

一、权限表:
 			 类内部 	 本包 	                子类 	                 外部包 
public  		√ 	         √ 			√ 			 √
protected 	        √ 		√ 			√ 			 ×
default  		 √ 		√ 			× 			×
private 		√ 		× 			× 			×

 二、文字解释(纵向)  说关系[一个家庭,同胞,非同胞的干儿子,没什么关系的外国人]
A. 类内部:”我的地盘我任性“,一个类里的 所有成员(属性,方法)是互相可以访问的。
B.  本包    : 	不废话,看列子。
*/
class Demo
{
	//private int a =0;
	int b = 1;
	protected int c = 2;
	public int d = 3;
}
class MyPackage 
{
	public static void main(String[] args) 
	{
		Demo d1 = new Demo();
		System.out.println(d1.b+"\t"+d1.c+"\t" + d1.d);
	}
}
/*
output :
PS E:\java_code\Demo2> java MyPackage
1       2       3 

C. 子类:  这里的子类是不同类(类成员),不同包的子类

	不是如下场景:
	1) 类成员:这个例子想不起来,大家帮忙想想。
	2) 同包子类:同包都可以访问了,更何况同包下,还是“父子关系”呢?
*/
class Demo
{
	//private int a =0;
	int b = 1;
	protected int c = 2;
	public int d = 3;
}
class MySon extends Demo
{
	public static void main(String[] args) 
	{
		MySon d1 = new MySon();
		System.out.println(d1.b+"\t"+d1.c+"\t" + d1.d);
	}
}

//结论: 这里讨论的子类是不同包且有父子关系 
		
package packa;
public class  DemoA 
{
	//被保护权限
	protected void method(){
			System.out.println("DemoAxxx");
	}
}

class DifferPackage extends packa.DemoA
{
	public static void main(String[] args) 
	{
		DifferPackage a = new  DifferPackage();
		a.method();
	}
}
// ok ,看来当儿子还是有用的
//加一个小插曲,不同包 vs 相同包的异常

class DifferPackage extends packa.DemoA
{
	public static void main(String[] args) 
	{
		//变成父类的引用呢?
		 packa.DemoA a = new   packa.DemoA();
		a.method();
	}
}

// java 报错,脱裤子放屁多费手续。 DifferPackage.java:6: 错误: method()可以在DemoA中访问protected a.method();

//同一个包下又是正确的。
class  DemoA 
{
	 protected void method(){
			System.out.println("DemoAxxx");
	}
}
class DifferPackage extends DemoA
{
	public static void main(String[] args) 
	{
		DemoA  a = new  DemoA();
		a.method();
	}
}

// why ? 请高手作答!

//+++++++++++++++++++++++++++++++++++++++
//修改 DemoA 代码:

package packa;
public class  DemoA 
{
	//默认(default)权限
	 void method(){
			System.out.println("DemoAxxx");
	}
}

//"main" java.lang.IllegalAccessError,看来当儿子还是有用的
/*+++++++++++++++++++++++++++++++++++++++
D. 外部包(既没有父子,又不是一个包)

通过上边的protected 的演示已经说明问题了(public 随意访问),同理default ,private 也访问不了


三、文字解释(横向) 聊权限

<pre name="code" class="java"> 			 类内部 	 本包 	                子类 	                 外部包 
public  		√ 	         √ 			√ 			 √
protected 	        √ 		√ 			√ 			 ×
default  		 √ 		√ 			× 			×
private 		√ 		× 			× 			×
有些看官就是不满意,本人又有强迫症,就做一个横向解释A public : 我爱暴露,谁都能访问我B protected: 同包(亦为同胞)都行,外人要考虑(你做我干儿子,玩笑别当真):有父子关系我让你访问,没有say noC default : 默认情况就我“同胞”可以访问 ,其他人say noD private : 我们家里内部解决,其他人 say no四、补充说明public protected default private 能用在哪里? 类上修饰?成员上?有什么区别A 类用哪写呢?其实啊,一个java 文件就一个public类,所以类应该分两种: 要么开放给他人(不同包),要不就不开放(default)我这个包自己用。所以一般情况下,我们说的四个权限都是 针对类中的成员变量的,而类本身是public 权限,提供给他人使用的(别较真,有默认的)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值