В Java могут ли анонимные классы расширять другой класс?
Код:
protected Interface1 varClass1 = new Interface1() {
Но мне также хотелось бы, чтобы этот анонимный вложенный класс также расширил класс Base
, что-то вроде:
protected Interface1 varClass1 = new Interface1() extends Base {
....
Возможно ли это на Java?
Ответы
Ответ 1
Анонимный класс может либо реализовать ровно один интерфейс, либо расширить один класс.
Обходным путем является создание именованного класса, который расширяет Base
и реализует Interface1
, а затем использует его как базовый класс для анонимного класса:
public abstract class Base1 extends Base implements Interface1 {}
...
protected Interface1 varClass1 = new Base1() {
...
Ответ 2
Пока невозможно расширить класс и реализовать интерфейс, что вы, вероятно, можете сделать, используя delegation.
Просто создайте экземпляр Base
в инициализаторе вашего анонимного класса и используйте его методы из методов, которые вы реализуете, из Interface1
.
EDIT. Мой ответ предполагает, что вы хотите наследовать только от Base
из-за его реализации, а не из-за его интерфейса. Это допустимое предположение, что интерфейс Base
не отображается после назначения объекта переменной Interface1
. Поэтому я считаю, что лучше использовать делегацию здесь вместо создания нового класса.