我正准备进行Oracle检查,并对以下问题的回答错误:
组合抽象私有对于内部类是合法的
当它回答是真的时,我回答错误,因为我找不到任何具有抽象私有内部类的用例,这些用例不能从子类中重写。有人可以解释,为什么/我们在语言中有什么?
答案 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 ...