Я знаю, что в Java мы не можем расширить заключительный класс. Но есть ли какой-либо альтернативный путь, где я получаю эффект расширения заключительного класса?
Поскольку у меня есть заключительный класс с требованиями, которые я ищу, поэтому если бы так или иначе я могу снова использовать это, он очень помог бы для меня.
Создайте обертку для финального класса?
Что-то вроде этого:
class MyClass {
private FinalClass finalClass;
public MyClass {
finalClass = new FinalClass():
}
public void delegatingMethod() {
finalClass.delegatingMethod();
}
}
Класс обертки, такой как MyClass
, не будет принят в качестве экземпляра FinalClass
. Если FinalClass
реализует любые интерфейсы, которые вы можете внедрить их в MyClass
, чтобы сделать классы более похожими. То же самое относится и к любым нефинансовым родителям FinightClass
; В этом случае ваш MyClass
дизайн должен быть совместим с этими родительскими классами.
Еще можно создать класс обертки во время выполнения с использованием отражения. В этом случае вы можете использовать класс прокси
. Остерегайтесь, что прокси-классы требуют глубоких знаний о системе типа Java.
Самый простой вариант будет написать обертку, которая содержит экземпляр конечного класса в качестве переменной элемента и действует как прокси к конечному классу.
Таким образом, легко переопределить или продлить методы окончательного класса.