【问题标题】:abstract private inner class抽象私有内部类
【发布时间】:2015-08-01 12:40:02
【问题描述】:

我正在准备 Oracle 考试,但对以下问题的回答不正确:

abstract private 的组合对于内部类是合法的

答案是真的,我回答错了,因为我找不到任何使用抽象私有内部类的用例,它不能被子类覆盖。有人可以解释一下,为什么/为什么我们有这种语言?

【问题讨论】:

标签: java abstract-class private inner-classes


【解决方案1】:

抽象私有的组合对于内部类是合法的

这有点令人困惑,但规则是内​​部类不能有抽象私有方法。

如果考试的说法相反,那就错了。

更新:如果你的意思是在类声明中,那么答案是真的,检查这段有效代码...

public class MyOuter {
    abstract private class MyInner {
        //the combination abstract private is legal for inner classes: TRUE
    }
}

要知道为什么或何时使用它,请查看suggested link,有一个good explanation 与此有关...

【讨论】:

  • 我想你误解了这个问题,我的意思是抽象私有内部类,而不是内部类中的抽象私有方法
  • 你的意思是在类声明中?
  • 内部类可以是abstractprivate
  • @Jordi 是的,在内部类的声明中
  • @Kartic 顶级类可以是abstract 和final,但不代表它可以是abstract final...
【解决方案2】:

Java 语言规范定义私有成员的含义如下:

否则,成员或构造函数被声明为私有,并且当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体中时才允许访问。

也就是说,可以从位于同一源文件中的任何代码访问(并且可以是子类)私有内部类。例如,您可以这样做:

public class C {

   private abstract class A {
       abstract void foo();
   }

   void bar() {
       new A() {
           @Override void foo() {
               // do something
           }
       }
   }
}

有趣的是,声明为私有的方法不能被覆盖,但私有类中的方法可以。

【讨论】:

  • 谢谢,这是我需要的!
猜你喜欢
  • 2022-11-29
  • 1970-01-01
  • 2011-07-30
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多