Java访问权限修饰符详解
Java中的访问权限修饰符(Java关键字)
今天很皮的发现,自己现在竟然不会玩儿Java基础了,就翻看了一下自己的笔记,写一篇文章复习一下!
测试环境:Java运行环境,myEclipse。
测试前准备:实体类包(Student类,Teacher类),测试类包(TestPublic类,TestProtected类,TestPrivate类)。
首先让我们想想这四种修饰符:public,protected,default(也有叫frendly的,不过两个都通不过编译,不写就是这个修饰符了),private。
测试开始:
修饰类时:当访问权限修饰符修饰类的时候,只能使用默认的修饰符和public修饰符,在不适用public的时候在不同的包中不可以访问到这个类,在Java这种面向对象编程的语言来说,应该将类设置成public的类,使用了public修饰的类可以导入到任何的类中,而不修饰的类只能在本包中使用。
没有修饰的类Teacher类:
相同的包下,可以任意使用:
不同的包,访问不到:
修饰其它时:当访问权限修饰符修饰成员方法和成员变量的时候,这四种修饰符代表了四种访问权限,我们可以开始测试。
1:首先建立实体包和一个测试包,我们在这个entity包中写一个Student类,其中写入八个元素,为了测试的方便,我们可以都将其用static进行修饰,四个变量和四个方法分别用不同的修饰符修饰。
2:在测试包中写TestPublic测试类,可以看到通过类名调用的成员变量和成员方法只有public修饰符修饰的通过了编译。
3:在测试包中写TestProtected测试类并继承自Student类,可以看到通过类名调用的成员变量和成员方法使用public和protected修饰符修饰的通过了编译。
4:在实体包中写TestDefault测试类并继承自Student类,可以看到通过类名调用的成员变量和成员方法只有private修饰符修饰的没有通过编译。
5:回到Student实体类中,会发现使用private修饰的成员方法和成员变量被黄线抬起来了,鼠标悬浮上去,成员变量提示要么删除这个变量,要么提供getter和setter方法,要么加上注解表示这个成员变量不使用。而成员方法是不可能有getter和setter方法的,这些说明了什么,说明了private的访问范围。
总结如下:
1:public修饰的变量或者方法在不同包中,相同包中,子类中,当前类中都是可以直接访问的。
2:protected修饰的变量或者方法在相同包中,子类中,当前类中都是可以直接访问的,在不同包中的类则不能访问。
3:default(也就是默认的)的变量或者方法在相同包中,当前类中都是可以直接访问的,在不同包中,即便是子类中也不能访问。
4:private修饰的变量或者方法只能在当前类中都是直接访问,在不同类中就不能访问,只能提供向外的公开的方法去调用,也就是面向对象的封装(这里暂时不提面向对象)。
关系图如下:
作用域 |
当前类 |
同一包 |
子孙类 |
其它包 |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
|
default(friendly) | √ |
√ |
||
private |
√ |