Эквивалентный расширению заключительного класса в Java

Я знаю, что в Java мы не можем расширить заключительный класс. Но есть ли какой-либо альтернативный путь, где я получаю эффект расширения заключительного класса?

Поскольку у меня есть заключительный класс с требованиями, которые я ищу, поэтому если бы так или иначе я могу снова использовать это, он очень помог бы для меня.

13
задан harpun 1 February 2014 в 14:44
поделиться

2 ответа

- 2856393-

Создайте обертку для финального класса?

Что-то вроде этого:

class MyClass {
    private FinalClass finalClass;

    public MyClass {
        finalClass = new FinalClass():
    }

    public void delegatingMethod() {
        finalClass.delegatingMethod();
    }
}

Класс обертки, такой как MyClass , не будет принят в качестве экземпляра FinalClass . Если FinalClass реализует любые интерфейсы, которые вы можете внедрить их в MyClass , чтобы сделать классы более похожими. То же самое относится и к любым нефинансовым родителям FinightClass ; В этом случае ваш MyClass дизайн должен быть совместим с этими родительскими классами.

Еще можно создать класс обертки во время выполнения с использованием отражения. В этом случае вы можете использовать класс прокси . Остерегайтесь, что прокси-классы требуют глубоких знаний о системе типа Java.

28
ответ дан 1 December 2019 в 20:11
поделиться

Самый простой вариант будет написать обертку, которая содержит экземпляр конечного класса в качестве переменной элемента и действует как прокси к конечному классу.

Таким образом, легко переопределить или продлить методы окончательного класса.

3
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: