匿名class能否实现抽象class的非抽象方法?
Can an anonymous class implement the non abstract method of the abstract class?
是否可以使用匿名 class 覆盖抽象 class 非抽象方法? FindBugs 工具发出“Uncallable method of anonymous class”问题。请查看以下示例以获取更多信息
public class BaseClass {
// This class is a Library Class.
}
public abstract class AbstractBaseClass extends BaseClass {
public abstract void abstractMethod();
public void nonAbstractMethod() {}
}
public abstract class DerivedAbstractClass extends AbstractBaseClass {
// Here Some more additional methods has been added
}
public class DemoAbstract {
public static void main(String[] args) {
init();
}
private static void init() {
DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
@Override
public void abstractMethod() {
}
@Override
public void nonAbstractMethod() {
// Is it possible to override like this?
}
};
}
}
是的,这是可能的。
您可以覆盖任何非最终、非静态方法
是的,有可能!
原因?
Anonymous class 使您能够同时声明和实例化一个 class,在您的示例代码中,这是一行:(DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass()
).
匿名 类 与本地 class 类似,只是它们没有名称。
在下面的片段中,您正在扩展 DerivedAbstractClass 并可以为其抽象方法提供实现,如果需要,您也可以覆盖非抽象方法。
但如果需要,您可能希望在覆盖之前调用 super.nonAbstractMethod();
,如下所示:
DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
@Override
public void abstractMethod() {
//anonymous clas providing implemntation
}
@Override
public void nonAbstractMethod() {
super.nonAbstractMethod();
//anonymous clas overriding
}
};
是否可以使用匿名 class 覆盖抽象 class 非抽象方法? FindBugs 工具发出“Uncallable method of anonymous class”问题。请查看以下示例以获取更多信息
public class BaseClass {
// This class is a Library Class.
}
public abstract class AbstractBaseClass extends BaseClass {
public abstract void abstractMethod();
public void nonAbstractMethod() {}
}
public abstract class DerivedAbstractClass extends AbstractBaseClass {
// Here Some more additional methods has been added
}
public class DemoAbstract {
public static void main(String[] args) {
init();
}
private static void init() {
DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
@Override
public void abstractMethod() {
}
@Override
public void nonAbstractMethod() {
// Is it possible to override like this?
}
};
}
}
是的,这是可能的。 您可以覆盖任何非最终、非静态方法
是的,有可能!
原因?
Anonymous class 使您能够同时声明和实例化一个 class,在您的示例代码中,这是一行:(DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass()
).
匿名 类 与本地 class 类似,只是它们没有名称。
在下面的片段中,您正在扩展 DerivedAbstractClass 并可以为其抽象方法提供实现,如果需要,您也可以覆盖非抽象方法。
但如果需要,您可能希望在覆盖之前调用 super.nonAbstractMethod();
,如下所示:
DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
@Override
public void abstractMethod() {
//anonymous clas providing implemntation
}
@Override
public void nonAbstractMethod() {
super.nonAbstractMethod();
//anonymous clas overriding
}
};