关于 java 中的四种访问修饰符,public ,default ,protected ,private 的作用范围本以为很熟悉了,但碰到了这样一段代码:
- package pac1;
- public class Parent {
- protected int i;
- protected class Inner{
- }
- }
- package pac2;
- import pac1.Parent;
- public class Child extends Parent {
- public static void main(String args[]){
- new Child().i=0;
- Inner i = new Parent().new Inner();
- }
- }
代码的意思是,父类与子类不在一个包,父类中有 protected 的内部类,现在想在子类中生成父类中内部类对象。但是发现报这错误:
- Error:(8, 28) java: Inner()可以在pac1.Parent.Inner中访问protected
protected 的访问权限是这说的,同一个包下是可以随意访问的,其他包下只有之类可以访问。的确
左边是没有问题的,但是右边是内部类生成方法,为什么不能访呢? 原来我在这里只考虑了 Parent 和 Child 的包位置和继承关系,而没有考虑内部类和 Child 也是不同包,而 Inner 的构造函数访问权限不为 public,因此在不同包又没有继关系的 Child 是不能生成 Inner 的。
- Inner i = new Parent().new Inner();
来源: