抽象的私人内部阶级

时间:2015-05-20 10:15:25

标签: java abstract-class private inner-classes

我正准备进行Oracle检查,并对以下问题的回答错误:

  

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

当它回答是真的时,我回答错误,因为我找不到任何具有抽象私有内部类的用例,这些用例不能从子类中重写。有人可以解释,为什么/我们在语言中有什么?

2 个答案:

答案 0 :(得分:3)

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

  

否则,成员或构造函数被声明为private,当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。

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

public class C {

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

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

值得注意的是,声明为private的方法无法覆盖,但私有类中的方法可以是。

答案 1 :(得分:0)

  

组合抽象私人对于内部阶级是合法的

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

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

更新:如果您的意思是在课堂声明中,那么答案为真,请检查此有效代码...

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

要知道使用它的原因或时间,请查看suggested link,此处有一个good explanation ...