当前位置: 首页 > 面试题库 >

受保护的/公共内部类

壤驷康裕
2023-03-14
问题内容

有人可以给我解释一下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教程的“
控制对类成员的访问”页面。



 类似资料:
  • 问题内容: 什么时候以及为什么要在类中使用,和函数以及变量?它们之间有什么区别? 例子: 问题答案: 你用: 范围,以使该属性/方法可从任何位置,对象的其他类和实例使用。 当您希望您的属性/方法仅在其自己的类中可见时。 要使属性/方法在扩展当前类的所有类(包括父类)中可见时显示范围。 更多:( 有关全面信息) PHP手册-可见性

  • 当我试图从受保护访问级别的抽象类访问和重写继承的抽象函数时, 在删除受保护的访问类型时,Eclipse会向我抛出以下错误

  • 嗨,我有一个抽象类,其中有一些公共方法和一些抽象方法。我让公众知道,他们实现了派生类的通用方法。 让我困惑的是,为什么我想定义一个公共抽象方法,而不是受保护的抽象方法。在抽象类中定义公共抽象方法对我来说毫无意义。。。。因为if是一个抽象,在派生类中会被重写,但if被定义为public也是一样的,但在某种程度上,将其定义为protected更有意义,因为我们知道,我们将在派生类中重写它。 在抽象类中

  • 问题内容: 当我用方法覆盖方法时,Java编译器不会抱怨。这里到底发生了什么?由于父方法的可见性较低,它是覆盖还是隐藏父方法? 问题答案: 子类始终可以扩大访问修饰符,因为它仍然是超类的有效替代。从Java规范中有关覆盖和隐藏的需求: 覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与覆盖或隐藏方法相同的访问权限,如下所示: 如果覆盖或隐藏方法是公共的,则覆盖或隐藏方法必须是公共的;否则,将发

  • 问题内容: 通读“用Java思考”,我陷入了《内部类》一章的ex:6。 练习6:(2)在自己的程序包中使用至少一种方法创建一个接口。在单独的程序包中创建一个类。添加一个实现该接口的受保护的内部类。在第三个包中,从您的类继承,并在方法内部,返回受保护的内部类的对象,并在返回期间向上转换到接口。 这是我的代码: IOne.java 接口 COne.java 具有实现接口的受保护内部类的类 CTwo.j

  • 问题内容: 我正面临以下问题。当我遇到问题时,我试图编写一个有关Java策略的简单教程。编译器在界面上给我一个“ 预期”错误:这是完整的类: 为什么会出现此错误?提前非常感谢您。 问题答案: 方法名称是Java关键字(第3.9节,JLS),不能是方法名称。将您的方法名称更改为非关键字。