Подтвердить что ты не робот

В Java могут ли анонимные классы расширять другой класс?

Код:

protected Interface1 varClass1 = new Interface1() {

Но мне также хотелось бы, чтобы этот анонимный вложенный класс также расширил класс Base, что-то вроде:

protected Interface1 varClass1 = new Interface1() extends Base {
....

Возможно ли это на Java?

4b9b3361

Ответ 1

Анонимный класс может либо реализовать ровно один интерфейс, либо расширить один класс.

Обходным путем является создание именованного класса, который расширяет Base и реализует Interface1, а затем использует его как базовый класс для анонимного класса:

public abstract class Base1 extends Base implements Interface1 {}

...

protected Interface1 varClass1 = new Base1() {
   ...

Ответ 2

Пока невозможно расширить класс и реализовать интерфейс, что вы, вероятно, можете сделать, используя delegation.

Просто создайте экземпляр Base в инициализаторе вашего анонимного класса и используйте его методы из методов, которые вы реализуете, из Interface1.

EDIT. Мой ответ предполагает, что вы хотите наследовать только от Base из-за его реализации, а не из-за его интерфейса. Это допустимое предположение, что интерфейс Base не отображается после назначения объекта переменной Interface1. Поэтому я считаю, что лучше использовать делегацию здесь вместо создания нового класса.