关于Java protected的总结及对作用域和跨包调用的理解

本文深入探讨Java中protected修饰符的使用场景与访问控制规则,包括其在子类继承、跨包访问及方法覆盖等方面的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

protected

ref

深入理解 Java 中 protected 修饰符

作用域 - 廖雪峰的官方网站这里把java的作用域的用途逻辑说的很清晰,强烈推荐学习。比画表格的那些好多了!

对本包和所有子类可见,一般就用在方法上,字段上不提倡


实验

https://github.com/BinchaoPeng/JavaLearn/tree/master/src/protectedTest
关于跨包继承方法是否重写这三者的实验在这里,后面的总结部分不一定完整,看是实验更好体会

我的理解逻辑

首先,porotected是关于子类继承方面的问题,即子类及子类的子类可以访问父类的protected方法。
其次,跨包是public和default的问题,public允许跨包,default默认是同一包下。
最后,得考虑子类是否overide了父类的protected方法

从写代码的实际操作方面来看,我们会发生以下情况及他们的联合:

  1. 继承发生在不同包或同一包
  2. 调用类去生成实例在不同包或同一包(考虑同一包下,在子类中生成子类实例并调用protected方法和在其他类中生成子类实例并调用protected方法)
  3. 实例的引用可能是父类对象
  4. 可能overide了父类的protected方法,也可能没有
  5. 可能在父类包调用,也可能在子类包调用,或者其他包调用

总体可以看

一、包层面
跨包了,则不能访问非public方法,因此访问不到protected方法,这与继承无关

二、继承层面
只要在继承这条链路上才考虑protected,具体情况是(同一包的前提下):
在子类中生成子类实例并调用protected方法,可以调用
在其他类中生成子类实例并调用protected方法,不能调用,除非override了(因为override表示他自己写了这个方法)

三、override层面
如果overide了,可以看成子类本身就有这个方法,不用寻找父类
如果没有overide,则要考虑和父类的相对位置,因为要向上访问父类的方法

欢迎大家讨论指正,刚想到的理解思路,可能有纰漏错误之处,一起寻求一种最佳理解方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值