JavaSE:3min讲解权限修饰符
来源:互联网 发布:办公网络解决方案 编辑:程序博客网 时间:2024/05/17 09:20
一个项目有很多类,但是有些类,并不希望被其他类使用。每个类中都有成员和方法,但是并不是每个成员和方法都允许在其他类中调用。如何能做到访问控制呢?就需要使用访问权限修饰符。
Java中的访问权限修饰符有4种,但是仅有3个关键字,因为不写访问权限,在Java中被称为默认权限,或同包权限,本文中以(default)代替。下面按照权限从小到大的顺序对4中访问权限分别介绍。
1.私有权限(private)
private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。
2.默认权限(default)
类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。
3.受保护权限(protected)
protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
4.公共权限(public)
public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
下面我们通过代码进行测试:
我们先定义一个PermissionTest类,并在里面用4种修饰符定义4个方法,然后在本类中进行调用:
package day0709101112_object;public class PermissionTest {public void showPublic(){System.out.println("show-Public.");}protected void showProtected(){System.out.println("show-Protected.");}void showDefault(){System.out.println("show-Default.");}private void showPrivate(){System.out.println("show-Private.");}public static void main(String[] args) {PermissionTest permissionTest = new PermissionTest();permissionTest.showPublic();permissionTest.showProtected();permissionTest.showDefault();permissionTest.showPrivate();}}
输出:
show-Public.
show-Protected.
show-Default.
show-Private.
结论:在本类中,4种修饰符都能访问到。
接下来我们在同一个包中测试子类:
package day0709101112_object;public class PermissionTest2 extends PermissionTest{/** * 同一个包中测试子类 */public static void main(String[] args) {// TODO Auto-generated method stubPermissionTest2 permissionTest = new PermissionTest2();permissionTest.showPublic();permissionTest.showProtected();permissionTest.showDefault();//permissionTest.showPrivate();//The method showPrivate() from the type PermissionTest is not visible}}
permissionTest.showPrivate();
报错:
The method showPrivate() from the type PermissionTest is not visible
输出:
show-Public.
show-Protected.
show-Default.
结论:同一个包中的子类,除了private,3种修饰符都能访问到。
接下来我们在同一个包中测试非子类:
package day0709101112_object;public class PermissionTest3{/** * 同一个包中测试非子类 */public static void main(String[] args) {PermissionTest permissionTest = new PermissionTest();permissionTest.showPublic();permissionTest.showProtected();permissionTest.showDefault();//permissionTest.showPrivate();//The method showPrivate() from the type PermissionTest is not visible}}
permissionTest.showPrivate();
报错:
The method showPrivate() from the type PermissionTest is not visible
输出:
show-Public.
show-Protected.
show-Default.
结论:同一个包中的非子类,除了private,3种修饰符都能访问到。
接下来我们在不同包中测试子类:
package day03_jichu;import day0709101112_object.PermissionTest;public class PermissionTest4 extends PermissionTest{/** * 不同包中测试子类 */public static void main(String[] args) {// TODO Auto-generated method stubPermissionTest4 permissionTest = new PermissionTest4();permissionTest.showPublic();permissionTest.showProtected();//permissionTest.showDefault();//The method showDefault() from the type PermissionTest is not visible//permissionTest.showPrivate();//The method showPrivate() from the type PermissionTest is not visible}}
permissionTest.showPrivate();报错:
The method showPrivate() from the type PermissionTest is not visible
permissionTest.showDefault();报错:
The method showDefault() from the type PermissionTest is not visible
输出:
show-Public.
show-Protected.
结论:不同包中的子类,除了private、default,其他2种修饰符都能访问到。
接下来我们在不同包中测试非子类:
package day03_jichu;import day0709101112_object.PermissionTest;public class PermissionTest5{/** * 不同包中测试非子类 */public static void main(String[] args) {PermissionTest permissionTest = new PermissionTest();permissionTest.showPublic();//permissionTest.showProtected();//The method showProtected() from the type PermissionTest is not visible//permissionTest.showDefault();//The method showDefault() from the type PermissionTest is not visible//permissionTest.showPrivate();//The method showPrivate() from the type PermissionTest is not visible}}
permissionTest.showPrivate();报错:
The method showPrivate() from the type PermissionTest is not visible
permissionTest.showDefault();报错:
The method showDefault() from the type PermissionTest is not visible
permissionTest.showProtected();报错:The method showProtected() from the type PermissionTest is not visible
输出:
show-Public.
结论:不同包中的非子类,只有public修饰符都能访问到。
最后画个图作为总结,铭记于心哈:
- JavaSE:3min讲解权限修饰符
- JavaSE:3min讲解常见的修饰符
- JavaSE:3min讲解成员内部类的常见修饰符
- JavaSE:3min讲解内部类
- JavaSE:1min讲解引用类型参数(3)-接口
- JavaSE:3min讲解匿名内部类的使用
- Java中权限修饰符讲解
- JavaSE:1min讲解链式编程
- JAVASE之权限修饰内部类
- 权限修饰符 权限
- JavaSE:1min讲解引用类型参数(1)-类
- 权限和权限修饰符
- java修饰符权限
- java 权限修饰符
- 访问权限修饰符
- java 权限修饰符
- java 权限修饰符
- 权限修饰符
- 一篇很好的关于 java@SuppressWarings注解的文章,转载自http://www.cnblogs.com/fsjohnhuang/p/4040785.html
- 实例和其它对象的内建函数
- 与大家分享一下常用的Linux命令
- 从零开始学JDBC--1.11 事务机制以及案例分析
- 安卓布局查看器uiautomatorviewer的使用
- JavaSE:3min讲解权限修饰符
- 杂项-cpp
- 轻松搞定RabbitMQ
- 联网上传图片
- 从简单的JPA到Spring Data JPA
- Appium_Python_Api文档
- 在Python里安装Jieba中文分词组件
- layoutSubviews在什么情况下调用
- NOIP 2013 CODE[VS] 3287 货车运输 倍增LCA + 最大生成树