抽象私有内部 class

abstract private inner class

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

the combination abstract private is legal for inner classes

事实证明答案是正确的,我回答错误,因为我找不到任何具有抽象私有内部 class 的用例,它不能被 subclasses 覆盖。谁能解释一下,why/for 我们的语言是什么?

the combination abstract private is legal for inner classes

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

如果考试说的是相反的话那就错了

更新:如果你的意思是在class声明中,那么答案是正确的,检查这个有效片代码...

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

要知道为什么或什么时候使用它,请查看 suggested link, there is a good explanation 关于这个...

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

Otherwise, the member or constructor is declared private, and access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.

也就是说,私有内部 class 可以从驻留在同一源文件中的任何代码访问(并且可以被子class编辑)。例如,您可以这样做:

public class C {

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

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

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