Java匿名子类和常规(非匿名)子类的区别

标签 java reflection overriding subclass

我在 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/

相关文章:

java - MigLayout 跨度组件从单元格溢出

java - JSF 2.0 在 FacesContext.responseComplete() 上执行 javascript

java - 如何从 Web 存档的 WEB-INF 目录加载资源

c# - 为什么 IsGenericParameter 对于泛型参数为假 T

java - 多个关键事件?

java - 如何对 ArrayList 进行排序

java - 如何使用给定的自定义注释运行测试用例

c# - 从资源加载的程序集引发无法加载文件或程序集

c# - 覆盖控制台关闭

java - 什么是java中的@override注解?