我无法在Java中查找有关此类子类/覆盖的信息,我在Swing应用程序中看到了很多用法(事件监听器和类似的东西):
// ...
SomeClass foo = new SomeClass() {
@Override
public String methodToOverride() { return ""; }
}
VS
class SubClass extends SomeClass {
@Override
public String methodToOverride() { return ""; }
}
// ...
SubClass foo = new SubClass();
第一种情况仍然是'SomeClass'的子类,还是与重写方法相同的类型?特别是,如果在methodToOverride()
内部super.methodToOverride()
调用methodToOverride()
,第一种情况会发生什么?它会调用原始的SomeClass的methodToOverride(),还是SomeClass的父{{1}}?
答案 0 :(得分:2)
第一个案例仍然是'SomeClass'的子类,还是与重写方法相同的类型?
它是SomeClass
的子类。你是什么意思 - “相同的类型与重写方法”。这没有意义。
如果在methodToOverride()内部调用super.methodToOverride(),第一种情况会发生什么?它会调用原始的SomeClass的methodToOverride(),还是SomeClass的parent methodToOverride()?
它将调用SomeClass
中的方法。
基本上这两种方法几乎完全相同。当您只想使用一次时,通常使用匿名子类。区别在于 - 您不能在匿名子类中使用构造函数。