Java的访问控制符详解(结合代码演示)
时间:2022-07-25
本文章向大家介绍Java的访问控制符详解(结合代码演示),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
概述
Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节是需要暴露的。Java中四种“访问控制符”说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
修饰符 |
同类 |
同包 |
子类 |
所有类 |
---|---|---|---|---|
private |
* |
|||
default |
* |
* |
||
protected |
* |
* |
* |
|
public |
* |
* |
* |
* |
下面归纳一下Java用于控制可见性的4个访问修饰符:同包同类中,可以自由访问protected成员
1.private 表示私有,只有自己类能访问
2.default 表示没有修饰符修饰,只有同一个包的类能访问
3.protected 表示可以被同一个包的类以及其他包中的子类访问
4.public 表示可以被该项目的所有包中的所有类访问
结合代码详解
下面通过代码测试对Java中4种访问权限修饰符的区别做进一步的说明
首先我们创建4个类:a1
,a2
,b1
,b2
,分别比较其在本类、本包、子类、其他包的区别
代码结构:
public
以上可以说明 public 修饰符的访问权限为:该项目的所有包中的所有类。
protected
只有 b1 编译不通过,说明 protected 修饰符的访问权限为:同一包中的类和不同包下的子类。
不过注意,到这儿还没完!!!
关于 protected 有两个细节需要特别强调一下:
1.若父类和子类在同一个包中,子类可访问父类的protected成员,也可访问父类对象的peotected成员。
2.若子类和父类不再同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员。
对于初学者可能不太好理解,下面看代码就明白了
default
所谓默认,也就是什么都不加
由此可以说明,default 修饰符的访问权限为: 同一个包中的类
private
这个就不必多说了吧,private修饰符的访问权限为:同一个类
小结
- 同包不同类中,无任何继承关系,可以自由访问protected成员
- 同包不同类中,具有继承关系,任何子类或者子类的子类都可以访问protected成员
- 不同包不同类中,不具有继承关系,不可以访问其它类protected成员
- 不同包不同类中,具有继承关系,子类可以访问父类protected成员。但是父类对象不可以访问自己的protected成员,否则报这样的错误:The method speak(Object) from the type Person is not visible
- 不同包不同类中,具有继承关系,间接子类中除该类对象自己外,它的直接父类,以及间接父类都不可以访问自己的protected成员。
- Android6.0锁屏源码分析之界面布局分析
- Android6.0源码分析之menu键弹出popupwindow菜单流程分析
- Android中初步自定义view
- Android中View研究自学之路 Android6.0源码分析之View(一)Android6.0源码分析之View(二)
- Android蓝牙配对弹出框过程分析 Android蓝牙配对弹出框过程分析
- Android6.0之修改或者查看系统属性值
- linux下Android7.0多用户编译问题
- 带你解锁蓝牙skill(0)
- WiFiAp探究实录--功能实现与源码分析
- Android7.1.1系统设置默认值大全
- Androidstudio编译c/c++jni方法
- 带你解锁蓝牙skill(三)
- 带你解锁蓝牙skill(二)
- 带你解锁蓝牙skill(一)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 交叉验证
- lipo命令
- protobuf 为经络,gRPC为骨架
- JVM系列之:String,数组和集合类的内存占用大小
- 如何用 Python 写个登陆窗口?
- 3500 字算法刷题精华总结
- web 云开发获取匿名登录返回的uid
- MySQL 最佳实践:慢查询分析三步曲
- 【NLP】利用jieba对网易云音乐的评论进行词云分析
- 【深度学习】一分钟速学 | NMS, IOU 与 SoftMax
- 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林
- 【机器学习基础】Python数据预处理:彻底理解标准化和归一化
- Logback配置文件这么写,TPS提高10倍
- 重学数据结构之队列
- 太简单,springboo 使用自定义的 Tomcat