protected使用微妙之处

1.protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域。这就是为什么我们在用clone方法的时候不能简单的直接将对象Object.clone()出来的原因了。(必须实现Cloneable 接口,并重写clone方法,并将访问控制符改为public,这样任何方法中克隆对象。

 

2.完整的访问规则:

 

 

  • 公共属性总能访问
  • 同一包的子类,可以任意使用
  • 同一个包的正常类,可以直接用他的实例进行访问
  • 不同包的正常类,无法访问任何属性和方法
  • 不同包的子类,不能使用父类实例的属性和方法
  • 不同包的子类,不能使用其它包的子类实例的属性和方法
  • 不同包的子类,可以直接使用父类的属性和方法

                • 总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。

                 3.访问修饰的总结

                      Here is a summary of the four access modifiers in Java that control visibility:

                • Visible to the class only ( private).
                • Visible to the world ( public).
                • Visible to the package and all subclasses ( protected).
                • Visible to the package—the (unfortunate) default. No modifiers are needed.

                 

                你可能感兴趣的:(Access)