权限修饰符
我们先回顾一下java中的权限修饰符
权限修饰符 | 同类 | 同包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
对于public和private大家都很了解了,但是对于protected,大家可能对它的概念可能就一句话:被protected修饰的成员对于本包和其子类可见。
该权限修饰符的关键是
- 基类的protected成员属性是包内可见的,并且对所有子类可见
- 若子类与基类不在同一包下,则在子类中,子类实例可以访问从基类继承来的protected方法,而不能访问基类实例的protected方法
遇到protected
首先思考这个protected来自何方
接着看其和这个地方是不是同包
最后看其是否有父子类关系
可以通过以下几个Test来掌握protected的用法
注意:观察包限定名
模型
1 | package com.lizhi.protect.p1; |
1 | package com.lizhi.protect.p1; |
1 | package com.lizhi.protect.p11; |
测试
1 | package com.lizhi.protect.p1; |
测试
1 | package com.lizhi.protect.p11; |
测试
1 | package com.lizhi.protect.p11; |
测试
1 | package com.lizhi.protect.p1; |
测试
1 | package com.lizhi.protect.p4; |
1 | package com.lizhi.protect.p44; |
说明:myobject4的clone直接来自MyObject4类本身
其范围是MyObjcet4的子类与其同包的类
Test4都不满足
所以编译不通过
测试
1 | package com.lizhi.protect.p4; |
1 | package com.lizhi.protect.p44; |
说明:myobject4的clone直接来源于Test4
范围是Test4子类及其同包的类
满足与其同包
编译通过