protected 用法探究

date
May 6, 2019
slug
protected 用法探究
status
Published
tags
Java
summary
type
Post

protected 的权限范围

protected 修饰的方法和域对包内和子类可见,也就是说对于调用者而言,要么是和基类同包,要么是基类的子类,其他情况均无法调用protected修饰的方法和域。总的来说条件就两个,满足其一即可:
  1. 是基类的子类
  1. 与基类同包

实战

  • 同包环境下测试
    • 基类:
      同包子类:
      可以看到子类调用父类对象的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()方式是属于父类的。

© Ryan Tang 2021 - 2025