【问题标题】:Is there a need to declare access modifiers in a private inner class是否需要在私有内部类中声明访问修饰符
【发布时间】:2016-10-20 18:52:57
【问题描述】:

假设我有这样的课程:

public class OuterClass {
  //...
  private class InnerClass {
     private int x; // This variable makes sense
     public int y; // Is there any use for this?
  }
}

在上面的代码中,由于内部类是私有的,所以只有外部类可以访问它的所有变量,甚至是私有的。除了封闭的外部类,内部类本身对任何其他类都不可见。

因此,即使上面的变量y 是公共的,它也不能被外部类以外的任何其他类访问。

似乎私有内部类中的所有访问修饰符默认都是私有的,不是吗?

那么考虑到这一点,是否有任何理由为内部类的任何成员声明访问修饰符?

【问题讨论】:

  • public class InnerClass2 extends InnerClass {}(虽然我不推荐这个)
  • @fabian 那有什么作用? InnerClass2 仍然可以访问 InnerClass 的所有公共和私有字段。
  • 这样你可以创建InnerClasspublic 子类的实例,它可以访问它的超类的public 成员。虽然想不出真正的用例......
  • @fabian 啊,没想到,谢谢

标签: java private inner-classes


【解决方案1】:

访问修饰符可能很重要的情况是用于覆盖超类方法的方法(例如 toString())。您不能降低被覆盖方法的可见性。为了编译类,toString() 必须始终声明为 public。

当外部类访问私有成员时,编译器会创建一个合成方法。此合成方法仅在嵌套类的 .class 文件中可见。

当内部类本身不是私有时,访问修饰符范围很重要的另一种情况。

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 2018-02-13
    • 2014-08-27
    • 1970-01-01
    • 2017-05-16
    • 2019-10-28
    • 2016-08-21
    相关资源
    最近更新 更多