Java访问权限之Protected
有的没的
示例来自于Java 访问权限控制_CSDN,然后个人感觉原文很详细但是解释的不太自洽,自行解释了一下。
可见性规则
- 基类的protected成员是包内可见的,并且对子类可见;
- (自己实现的类,仅包内以及子类可见)
- 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
- (不同包时继承得到的方法只能由自己和自己的父类可见)
- (不同包时继承得到的方法,自己只能看见自己的方法)
示例分析
示例一
1 | //示例一 |
(1)(3):f()从父类Father1处继承,Test1与Father1同包→Compile OK
(2)(4):clone()从Object类(间接)继承而来,Son1的clone()只有自己以及自己的父类(Father1)可见,Test1不可见→Compile Error
示例二
1 | //示例二 |
(1):clone()由MyObject2 自己实现,自己以及子类(Test2)可见→Compile Error
(2):clone()从父类MyObject2继承, 只有自己以及自己的父类(MyObject2)可见→Compile OK
示例三
1 | //示例三 |
(1):clone()从Object类(间接)继承而来,只有自己以及自己的父类(Test3)可见→Compile OK
示例四
1 | //示例四 |
(1):clone()由MyObject4自己实现,只有自己、包内以及自己子类可见,Test4是它的父类→Compile Error
示例五
1 | //示例五 |
(1):clone()由MyObject4自己实现,只有自己、包内以及自己子类可见,Test5属于p5→Compile OK
实例六
1 | //示例六 |
(1):clone()从Object(间接)继承而来,只有自己以及自己的父类(Test6)可见→Compile OK
示例七
1 | //示例七 |
(1):clone()从Object继承而来,只有自己以及自己的父类可见→Compile Error