protected 用法探究
date
May 6, 2019
slug
protected 用法探究
status
Published
tags
Java
summary
type
Post
protected 的权限范围
protected 修饰的方法和域对包内和子类可见,也就是说对于调用者而言,要么是和基类同包,要么是基类的子类,其他情况均无法调用protected修饰的方法和域。总的来说条件就两个,满足其一即可:
- 是基类的子类
- 与基类同包
实战
- 同包环境下测试
基类:
同包子类:
可以看到子类调用父类对象的protected方法和自己继承的protected方法都是没有问题的,因为他们包名相同。
同包测试类调用:
同包的测类调用父类对象及子类兑现的protected方法均无问题。
- 不同包环境下测试
基类还是和之前的一样:
不同包的子类:
可以看到调用父类对象编译不通过,因为在当前环境下(com.ryan.priv.diff.Son类内),com.ryan.priv.diff.Son与com.ryan.priv.same.Father不同包,所以只能调用子类从父类继承的方法,只能使用super.show(),super.show2()来调用,new Father().show()和new Father.show2()是父类对象的方法,不是当前对象内继承区域的方法,自然编译不通过。
不同类测试:
就当前调用(com.ryan.priv.diff.DiffPackageTest对象内)环境而言,com.ryan.priv.diff.DiffPackageTest与com.ryan.priv.same.Father\com.ryan.priv.same.Son既不同包也不是他们的子类,所有调用他们的protected方法都编译不通过,而com.ryan.priv.diff.Son对象的show2()方法是编译通过的,因为测试类和com.ryan.priv.diff.Son同包,但是show()方法编译不通过,因为show()方式是属于父类的。