论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java的访问修饰符
Java的访问修饰符
种地
论坛元老
|
2023-4-15 09:09:31
|
显示全部楼层
|
阅读模式
楼主
主题
1725
|
帖子
1725
|
积分
5175
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。
在 Java 中,封装就意味着所有的实例域都带有 private 访问修饰符(私有的实例域),并提供带有 public 访问修饰符的域访问器方法和域更改器方法(公共的操作方法)。
访问修饰符
下面归纳一下 Java 用于控制可见性的 4 个访问修饰符:
public:声明为 public 的内容对所有类可见。
protected:声明为 protected 的内容对所有子类和同一个包中的所有其他类可见。
private:声明为 private 的内容仅对本类可见。对其他类都是不可见的,这对于子类来说也完全适用,即子类也不能访问父类的私有域。
缺省(无访问修饰符):无访问修饰符的内容对同一个包中的所有其他类可见。
Java 中的受保护部分(protected)对所有子类及同一个包中的所有其他类都可见。这与 C++ 中的保护机制稍有不同,Java 中的 protected 概念要比 C++ 中的安全性差。
访问修饰符用来修饰类,及类的内部结构
修饰类,只能用:public、缺省
修饰类的内部结构(属性、方法、构造器、内部类),可以用:public、protected、private、缺省 修饰
受访问保护
大家都知道,最好将类中的域标记为 private,而将方法标记为 public。任何声明为 private 的内容对其他类都是不可见的,这对于子类来说也完全适用,即子类也不能访问父类的私有域。
然而,在有些时候,人们希望父类中的某些方法允许被子类访问,或者允许子类的方法访问父类的某个域。为此,需要将这些方法或域声明为 protected。例如,如果将父类 Employee 中的 hireDay 声明为 proteced,而不是私有的,Manager 中的方法就可以直接地访问它。
不过,Manager 类中的方法只能够访问 Manager 对象中的 hireDay 域,而不能访问其他 Employee 对象中的这个域。这种限制有助于避免滥用受保护机制,使得子类只能获得访问受保护域的权利。
在实际应用中,要谨慎使用 protected 属性。假设需要将设计的类提供给其他程序员使用,而在这个类中设置了一些受保护域,由于其他程序员可以由这个类再派生出新类,并访问其中的受保护域。在这种情况下,如果需要对这个类的实现进行修改,就必须通知所有使用这个类的程序员。这违背了 OOP 提倡的数据封装原则。
受保护的方法更具有实际意义。
如果需要限制某个方法的使用,就可以将该方法声明为 protected。这表明子类(可能很熟悉祖先类)得到信任,可以正确地使用这个方法,而其他类则不行。这种方法的一个最好的示例就是 Object 类中的 clone 方法。
protected 方法对于指示那些不提供一般用途而应在子类中重新定义的方法很有用。
参考资料
《Java核心技术卷一:基础知识》(第10版)第 5 章:继承 5.1.10 受保护访问
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
种地
论坛元老
这个人很懒什么都没写!
楼主热帖
Beta 阶段事后分析
mac下配置Charles,安装证书,连接iOS ...
为什么 SQL 语句使用了索引,但却还是 ...
图的基本术语,邻接矩阵、邻接表表示方 ...
python经典习题(一)
Archlinux scarlett solo driver insta ...
DOS窗口命令和单表简单查询
5.返回值IDCANCEL和CommDlgExtendedErr ...
利用kubernetes中的leader选举机制来完 ...
地表最帅缓存Caffeine
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
分布式数据库
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表