【发布时间】:2015-08-01 12:40:02
【问题描述】:
我正在准备 Oracle 考试,但对以下问题的回答不正确:
abstract private 的组合对于内部类是合法的
答案是真的,我回答错了,因为我找不到任何使用抽象私有内部类的用例,它不能被子类覆盖。有人可以解释一下,为什么/为什么我们有这种语言?
【问题讨论】:
标签: java abstract-class private inner-classes
我正在准备 Oracle 考试,但对以下问题的回答不正确:
abstract private 的组合对于内部类是合法的
答案是真的,我回答错了,因为我找不到任何使用抽象私有内部类的用例,它不能被子类覆盖。有人可以解释一下,为什么/为什么我们有这种语言?
【问题讨论】:
标签: java abstract-class private inner-classes
抽象私有的组合对于内部类是合法的
这有点令人困惑,但规则是内部类不能有抽象私有方法。
如果考试的说法相反,那就错了。
更新:如果你的意思是在类声明中,那么答案是真的,检查这段有效代码...
public class MyOuter {
abstract private class MyInner {
//the combination abstract private is legal for inner classes: TRUE
}
}
要知道为什么或何时使用它,请查看suggested link,有一个good explanation 与此有关...
【讨论】:
abstract和private。
Java 语言规范定义私有成员的含义如下:
否则,成员或构造函数被声明为私有,并且当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体中时才允许访问。
也就是说,可以从位于同一源文件中的任何代码访问(并且可以是子类)私有内部类。例如,您可以这样做:
public class C {
private abstract class A {
abstract void foo();
}
void bar() {
new A() {
@Override void foo() {
// do something
}
}
}
}
有趣的是,声明为私有的方法不能被覆盖,但私有类中的方法可以。
【讨论】: