![]() |
Вызов переопределенного метода у родителя родителя
Есть класс A, который определяет метод someMethod. И в нем определен жизненно важный функционал:
Код:
public class A {Код:
public class B extends A {Задача: Отнаследоваться от класса B, переопределить someMethod, но вызвать someMethod класса A, так как в someMethod класса B реализован ненужный нам функционал и добавить свой. Код:
public class C extends B {Я могу привести конкретный пример. Доводя до ума компонент AutoComplete, найденый на Adobe Flex Exchange оказалось что в нем существует ряд багов, которые захотелось исправить. Все что хотел исправил, но вылез баг, зарытый в классе ComboBox, от которого наследуется компонент AutoComplete. ComboBox в свою очередь наследуется от ComboBase. Баг спрятан в функции updateDisplayList компонента ComboBox которая переопределяется из самых недр наследования. Здесь есть строка: Код:
textInput.getTextField().setSelection(0, textInput.text.length);updateDisplayList - жизненно необходимая функция и тем более в компоненте AutoComplete добавляется дополнительная функциональность. А вот функционал в ComboBox хотелось бы переделать и переопределить updateDisplayList именно его родителя. Вопрос: насколько это возможно и какие есть выходы из данной ситуации? |
Насколько я помню, никак такое не сделать.
И это правильно. Представляю какая каша началась бы была возможность переопределять метод 0супер-1супер-...nсупер класса |
А нельзя использовать агрегацию ? и вызывать метод объекта-экземпляра нужного вам класса A или B, притом что объект является членом вашего класса C.
|
Агрегация не подойдет. Например someMethod это реализация метода invalidateDisplayList() и хотелось бы чтобы все вызовы этого метода реализовывал класс C, без разницы из недр какого из родителей он был вызван.
|
Неужели ни у кого больше нету идей. Неужели все выходят из положения переносом класса из flex sdk в папку проекта, чтобы убрать ненужный код?
|
мне кажется Вам подойдет перепроектирование проекта (извиняюсь за игру слов). что-то тут не так )
|
Скорее всего не обойти. Как правило (в таких случаях) в классе C переопределяется метод и туда просто копируется содержимое того же метода из класса A (без копирования всего сдк).
нда... вообще интересно есть ли более правильное решение |
Я могу привести конкретный пример. Т.е. описать где именно я с этим столкнулся. Доводя до ума компонент AutoComplete, найденый на Adobe Flex Exchange оказалось что в нем существует ряд багов, которые захотелось исправить. Все что хотел исправил но вылез баг, зарытый в классе ComboBox, от которого наследуется компонент AutoComplete. ComboBox в свою очередь наследуется от ComboBase.
Баг спрятан в функции updateDisplayList компонента ComboBox которая переопределяется из самых недр наследования. Здесь есть строка: Код:
textInput.getTextField().setSelection(0, textInput.text.length);updateDisplayList - жизненно необходимая функция и тем более в компоненте AutoComplete добавляется дополнительная функциональность. А вот функционал в ComboBox хотелось бы переделать и переопределить updateDisplayList именно его родителя. |
Можешь попробовать поискать метод типа $invalidateDisplayList, так вобщем-то принято называть метод, если он должен експонировать родительский метод, при том, что этот же класс его оверрайдит. Ну, а если такого нету... ну не знаю, зависит от того на сколько проект должен быть совместим / поддерживаться дальше другими разработчиками и т.п. Если вы единственный его разработчик - я бы не заморачивался и просто дописал сам этот $... метод к нужному классу, а если нет - ну, тогда, как уже сказали, только самому взять и переписать...
|
Цитата:
Цитата:
|
| Часовой пояс GMT +4, время: 18:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.