匿名子类和常规(非匿名)子类之间的Java差异

时间:2014-04-09 19:37:38

标签: java reflection override subclass

我无法在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}}?

1 个答案:

答案 0 :(得分:2)

  

第一个案例仍然是'SomeClass'的子类,还是与重写方法相同的类型?

它是SomeClass的子类。你是什​​么意思 - “相同的类型与重写方法”。这没有意义。

  

如果在methodToOverride()内部调用super.methodToOverride(),第一种情况会发生什么?它会调用原始的SomeClass的methodToOverride(),还是SomeClass的parent methodToOverride()?

它将调用SomeClass中的方法。

基本上这两种方法几乎完全相同。当您只想使用一次时,通常使用匿名子类。区别在于 - 您不能在匿名子类中使用构造函数。