/*
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 权限,提供给他人使用的(别较真,有默认的)
java 中的四种访问权限(public protected [default] private) 笔记
最新推荐文章于 2024-05-07 15:46:24 发布