我在 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()
吗?
最佳答案
Is the first case still a subclass of 'SomeClass', or is it the same type with an overridden method?
它是SomeClass
的子类。你所说的“具有重写方法的相同类型”是什么意思。这没有意义。
what happens in the first case if inside methodToOverride() I call super.methodToOverride()? Will it call the original SomeClass' methodToOverride(), or SomeClass' parent methodToOverride()?
它将调用SomeClass
中的方法。
基本上,这两种方法的工作原理几乎相同。当您只想使用匿名子类一次时,您经常使用它们。不同之处在于 - 您不能在匿名子类等中使用构造函数。
关于Java匿名子类和常规(非匿名)子类的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972379/