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

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,则要考虑和父类的相对位置,因为要向上访问父类的方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值