我很难在Java中找到关于这种子类化/重写的信息,我看到它在Swing应用程序(事件侦听器和类似的东西)中经常使用:
// ...
SomeClass foo = new SomeClass() {
@Override
public String methodToOverride() { return ""; }
}
与
class SubClass extends SomeClass {
@Override
public String methodToOverride() { return ""; }
}
// ...
SubClass foo = new SubClass();
第一种情况仍然是"SomeClass"的子类,还是与重写方法的类型相同?特别是,如果在methodToOverride()
内部调用super.methodToOverride()
,在第一种情况下会发生什么?它会调用原始SomeClass的methodToOverride()还是SomeClass父methodToOverride()
?
第一种情况仍然是"SomeClass"的子类,还是与重写方法的类型相同?
它是SomeClass
的一个子类。你说的"具有重写方法的同一类型"是什么意思。这没有道理。
如果在methodToOverride()内部我调用super.methodToOverride(),在第一种情况下会发生什么?它会调用原始SomeClass的methodToOverride()还是SomeClass父methodToOverride()?
它将调用SomeClass
中的方法。
基本上,这两种方法的工作原理几乎相同。当您只想使用一次匿名子类时,通常会使用它们。区别在于,在匿名子类中不能有构造函数。