friendly java_关于Java的权限修饰符(public,private,protected,默认friendly)

本文详细解析了Java中的四种访问修饰符:public、protected、default(friendly)和private,通过实例对比展示了它们在不同包、类关系下的访问权限,并强调了面向对象封装性的应用。
摘要由CSDN通过智能技术生成

以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚.

现在总结如下:

一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限

Java访问权限修饰符包含四个:public,protected,friendly,private;但是,friendly在java中并没有显示的声明,成员变量和方法默认情况下就是friendly权限。

现在把它们的访问权限表示出来:(目前展示访问修饰符的方式主要有两种)

表示图一:(第一种展示方式,把不同的类文件分为两个变量,"是否是相同包","是否是子类".这样总共2*2=4种情况再加上本类的访问,总共5种情况都考虑进入了.我比较赞成这种分类的方式.简单明了,容易理解.)

bd3029e0358544533b00ef64705d667c.png

表示图二:(这种展示方式也不错.这种展示方式多了一层,同一个类中的访问条件,但是同包中的子类和非子类统一了,Java的各个访问修饰符在同包子类和非子类的访问效果上是一样的,可以合并)

访问修饰符

同一个类

同包

不同包,子类

不同包,非子类

private

默认

protected

public

二.首先,说明public的权限问题

定义4个类Person、People、Student、Computer,分别比较本类、同包、子类、其他包的区别。

这里要注意:当重写父类成员函数时,子类的成员函数不能比父类的成员函数权限小,一般重写把权限定义相同即可。

代码如图所示:

1.public 同类访问

382f644720102d6f78a31a7bcd15a185.png

2.public 同包不同类访问(非子类)

2e816fa61f374bd2c12e84e66181d70e.png

3.public 同包不同类访问(子类)

74f16c74d5608825deeaa00cfe5f737c.png

4.public 不同包下的非子类访问:

25a735b966efda7422f32dbd72da52ee.png

5.public 不同包下的子类访问:

f5008143b0d437abd3ed363cb9409250.png

以上关于成员变量name都没有编译错误,说明public类型在这五种情况下都是没有问题的.

三.再说protected 权限的问题.

附录Person.java 截图

21bf2257aa380c6d9fda491d3159854a.png

四.default(frienddly)权限问题.

同样定义4个类Person、People、Student、Computer,分别比较本类、同包、子类、其他包的区别。

这里要注意:default(不写默认指定default)同public一样可以修饰任何类而且类名要与文件名相同。

ab88a1f07f762643d9ac4a6537424181.png

其他几个类的代码和public测试中的一样.

这里只附录其中一个出错Student中的代码和错误.

0dcde251b121c880cbd392af83cd1942.png

Person、People,Teacher类能编译通过,就说明用default修饰的类在本类、同包中互相访问都是可以的,而Student、Computer编译不通过说明default不可以在包外,不管有没有继承关系的类都不可以互相访问。

五:最后测试private权限问题,

private意思是私有的,如果Person能编译通过而People、Student、Teacher,Computer编译不通过,就说明用private修饰的类只能在本类中访问。测试结果如下:

33d6bcf8d2b4eeab868090fa7f7b14e1.png

综上所述,java中4种修饰符访问权限的区别及详解全过程就此演示完了,再一次说明java语言的严谨性和安全性,我们在以后使用这4中修饰符时创建一个类,这个类的权限尽量要小,这样才能减少漏洞和提高安全性,从而体现java面向对象的封装性。

最后如图再回忆一下java中4个修饰符的访问权限:

884746e2fab77564d085d3dbdec2d596.png

===========================================================

补充:

一.访问权限修饰符修饰类名:

a0ae03122564e9ea91db6672eae6929f.png

1,不能用protected和private修饰类。(上图可以看到修饰类名的修饰符只有 public abstract 和final可以.)

2,用friendly修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。(上面可以看出用default修饰的在包外都是无法访问的.)

二.访问权限修饰符与继承

这里的访问修饰符指的是修饰成员变量和方法。可以分为两种情况:

1,子类与父类在同一包中

此时只有声明为private的变量与方法不能被继承(访问)。

classFather

{private intmoney ;int weight=100;

}classSon extends Father

{

viod f()

{

money=10000;//非法

weight=100; //合法

}

}

2,子类与父类不在同一包中

此时private与friendly均不能被继承(访问), protected与public可以。

Father.java

packagecom.aaa;public classFather

{intheight ;protected int money=120;public intweight;protected intgetMoney()

{returnmoney;

}void setMoney(intnewMoney)

{

money=newMoney;

}

}

Son.java

packagecom.bbb;importcom.aaa.Father;public class Son extendsFather

{voidf()

{

money=10000;//合法//height=170;//非法,height为friendly修饰的变量

System.out.println(money);//输出结果是10000//setMoney(300);//非法

int number=getMoney(); //合法

System.out.println(number);//输出结果是10000

}public static voidmain(String args[])

{

Son sss=newSon();

sss.f();

}

}

所以,访问权限修饰符权限从高到低排列是public  ,protected  ,friendly, private。

上面这个继承的问题实际还是访问修饰符的权限问题.

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。

2、protected:protected对于子女、兄弟来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

3、default(friendly):java的默认访问权限,这种权限通常被称为包访问权限,default对于兄弟来说,就是public的,在包之外,这些成员就变成private。

4、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。其他类想访问可以通过该类的成员方法访问如get/set

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值