Java基础之访问控制符总结


Java访问控制

Accessibility promotes software reuse, and proper use of it can ease the burden of maintenance in the long run. Accessibility restriction is the way how encapsulation or information hiding is implemented.

访问控制符不是一种安全机制,而是为了防止滥用(命名空间,变量作用域,可见性),以及为了使用方便( 封装 暴露接口,隐藏内部实现)

访问控制符号

3个关键字,4种访问权限

Access Modifiers Top-level Class Package Sub-classes World
Private Yes No No No
Protected Yes Yes Yes No
Public Yes Yes Yes Yes
Default(Package-private) Yes Yes No No
  1. private, 私有访问权限,使用关键字private进行权限控制。使用private声明的属性和方法只能在本类中被访问。
  2. default, 包访问权限, 无关键字。声明属性或方法时,如果没有使用任何的权限声明,则使用default权限。默认权限可以本包中的其他类访问,但无法被其他包中的类访问。
  3. protected, 继承访问权限,使用关键字protected进行权限控制。protected权限可以被本包中的其他类和其他包中的子类访问。
  4. public, 公共访问权限,使用关键字public进行权限控制。public权限可以被所有的类访问。

补充

更详细的图

![屏幕快照 2018-12-28 下午10.08.15](Java基础之访问控制符总结/屏幕快照 2018-12-28 下午10.08.15.png)

protecte关键字的的内涵

  • 基类的protected成员是包内可见的,并且对(包内对象的)子类可见;(意思是说 通过包外的父类引用声明父类对象父类protected成员不可见)

  • 企图跨越不同的包,从子类中调用基类实例的受保护方法。明显不行。

  • 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法

注意:类内调用是指一个方法在定义该类的代码内部使用,子类内调用是说在声明子类的代码中,通过子类调用从父类继承的protected方法(不一定可以调用)不是说在子类内就可以随意调用父类实例的protected方法!!!

举例:

比如如下继承关系

Object –>Base–>Sub

Object 属于java.lang.Object 其中有一个protect 方法 clone()

也就是说:

1。Base的clone方法(前提:未覆盖)只能在Base类内调用(因为clone方法属于Object ,所以该方法只能够在它的子类下和java.lang包内调用)。

  1. Base的声明的protect方法(包括覆盖Object的方法),可以在与Base相同的包内被调用,也可以被Base的子类调用。

文章作者: Bxan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bxan !
  目录