Может ли анонимный класс реализовать неабстрактный метод абстрактного класса?
абстрактный класс абстрактный метод не может быть переопределен с помощью анонимного класса?. Инструмент 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?
}
};
}
}
2 ответов
Да, это возможно!
причина?
анонимный класс позволяет одновременно объявлять и создавать экземпляр класса, и в вашем примере кода это строка: (DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass()
).
анонимные классы похожи на локальные классы, за исключением того, что у них нет имени.
В приведенном ниже фрагменте вы расширяете DerivedAbstractClass и можете предоставить реализации для его абстрактных методов, и если вы хотите, вы также можете переопределить неабстрактный метод тоже.
но вы можете называть super.nonAbstractMethod();
перед переопределением, если требуется, как показано ниже:
DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
@Override
public void abstractMethod() {
//anonymous clas providing implemntation
}
@Override
public void nonAbstractMethod() {
super.nonAbstractMethod();
//anonymous clas overriding
}
};