受保护的/公共内部类


问题内容

有人可以给我解释一下protected/ public 内部 类有什么区别吗?

我知道public内部类应尽可能避免(如本文所述)。

但是据我所知,使用protectedpublic修饰符之间没有区别。

看一下这个例子:

public class Foo1 {
 public Foo1() { }

 protected class InnerFoo {
  public InnerFoo() {
   super();
  }
 }
}

public class Foo2 extends Foo1 {
 public Foo2() {
  Foo1.InnerFoo innerFoo = new Foo1.InnerFoo();
 }
}

public class Bar {
 public Bar() {
  Foo1 foo1 = new Foo1();
  Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo();

  Foo2 foo2 = new Foo2();
  Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo();
 }
}

所有这些都可以编译,并且无论我声明InnerFoo protected还是都有效public

我想念什么?请指出一个使用protected或有所不同的情况public

谢谢。


问题答案:

protected访问修饰符将限制从比在同一个包及其子类之外的其他类的访问。

在所示的示例中,public和和protected将具有相同的效果,因为它们位于同一包中。

有关访问修饰符的更多信息,可能需要关注Java教程的“
控制对类成员的访问”页面。