受保护/公共内部类

2022-09-03 13:09:43

有人可以向我解释一下/内部类之间的区别吗?protectedpublic

我知道内部类应尽可能避免(如本文所述)。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();
 }
}

所有这些都是编译的,无论我声明还是.InnerFooprotectedpublic

我错过了什么?请指出一个使用 或 有区别的情况。protectedpublic

谢谢。


答案 1

访问修饰符将限制来自同一包及其子类中的类以外的类的访问。protected

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

有关访问修饰符的更多信息,可能会对 Java 教程的“控制对类成员的访问”页感兴趣。


答案 2

你可以认为受保护的内部类是受保护的成员,所以它只能访问类,包,子类,而不能访问世界。

此外,对于 outter 类,它只有两个访问修饰符。只是公共和包装。


推荐