![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Есть класс A, который определяет метод someMethod. И в нем определен жизненно важный функционал:
public class A {
//--------------------------
public function someMethod():void{
//жизненно важный функционал
}
}
public class B extends A {
//--------------------------
override public function someMethod():void{
super.someMethod();
//ненужный нам функционал
}
}
Задача: Отнаследоваться от класса B, переопределить someMethod, но вызвать someMethod класса A, так как в someMethod класса B реализован ненужный нам функционал и добавить свой. public class C extends B {
//--------------------------
override public function someMethod():void{
??? superOfClassA.someMethod();
//мой функционал
}
}
Я могу привести конкретный пример. Доводя до ума компонент AutoComplete, найденый на Adobe Flex Exchange оказалось что в нем существует ряд багов, которые захотелось исправить. Все что хотел исправил, но вылез баг, зарытый в классе ComboBox, от которого наследуется компонент AutoComplete. ComboBox в свою очередь наследуется от ComboBase. Баг спрятан в функции updateDisplayList компонента ComboBox которая переопределяется из самых недр наследования. Здесь есть строка: которая собственно выделяет в определенный момент весь текст, находящийся внутри текстового поля этого компонента, потом сбрасывая выделение. Если это делать в "чистом проекте" то все в порядке, но если флэшка подзагружена или не очень быстрый компьютер, то при очень быстром вводе текста - выделеный текст стирается и бывает так что в текстовом поле остается только часть "наскоро" введенного текста. updateDisplayList - жизненно необходимая функция и тем более в компоненте AutoComplete добавляется дополнительная функциональность. А вот функционал в ComboBox хотелось бы переделать и переопределить updateDisplayList именно его родителя. Вопрос: насколько это возможно и какие есть выходы из данной ситуации?
__________________
blog.diestro.ru Последний раз редактировалось Diestro; 14.10.2008 в 11:53. |
|
|||||
|
Насколько я помню, никак такое не сделать.
И это правильно. Представляю какая каша началась бы была возможность переопределять метод 0супер-1супер-...nсупер класса
__________________
Сам себе репортер |
|
|||||
|
[+1.3 31.10.08]
Регистрация: Sep 2008
Сообщений: 8
|
А нельзя использовать агрегацию ? и вызывать метод объекта-экземпляра нужного вам класса A или B, притом что объект является членом вашего класса C.
|
|
|||||
|
Агрегация не подойдет. Например someMethod это реализация метода invalidateDisplayList() и хотелось бы чтобы все вызовы этого метода реализовывал класс C, без разницы из недр какого из родителей он был вызван.
__________________
blog.diestro.ru |
|
|||||
|
Неужели ни у кого больше нету идей. Неужели все выходят из положения переносом класса из flex sdk в папку проекта, чтобы убрать ненужный код?
__________________
blog.diestro.ru |
|
|||||
|
мне кажется Вам подойдет перепроектирование проекта (извиняюсь за игру слов). что-то тут не так )
|
|
|||||
|
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Скорее всего не обойти. Как правило (в таких случаях) в классе C переопределяется метод и туда просто копируется содержимое того же метода из класса A (без копирования всего сдк).
нда... вообще интересно есть ли более правильное решение |
|
|||||
|
Я могу привести конкретный пример. Т.е. описать где именно я с этим столкнулся. Доводя до ума компонент AutoComplete, найденый на Adobe Flex Exchange оказалось что в нем существует ряд багов, которые захотелось исправить. Все что хотел исправил но вылез баг, зарытый в классе ComboBox, от которого наследуется компонент AutoComplete. ComboBox в свою очередь наследуется от ComboBase.
Баг спрятан в функции updateDisplayList компонента ComboBox которая переопределяется из самых недр наследования. Здесь есть строка: которая собственно выделяет в определенный момент весь текст, находящийся внутри текстового поля этого компонента, потом сбрасывая выделение. Если это делать в "чистом проекте" то все в порядке, но если флэшка подзагружена или не очень быстрый компьютер, то при очень быстром вводе текста - выделеный текст стирается и бывает так что в текстовом поле остается только часть "наскоро" введенного текста. updateDisplayList - жизненно необходимая функция и тем более в компоненте AutoComplete добавляется дополнительная функциональность. А вот функционал в ComboBox хотелось бы переделать и переопределить updateDisplayList именно его родителя.
__________________
blog.diestro.ru Последний раз редактировалось Diestro; 12.10.2008 в 18:46. |
|
|||||
|
Modus ponens
|
Можешь попробовать поискать метод типа $invalidateDisplayList, так вобщем-то принято называть метод, если он должен експонировать родительский метод, при том, что этот же класс его оверрайдит. Ну, а если такого нету... ну не знаю, зависит от того на сколько проект должен быть совместим / поддерживаться дальше другими разработчиками и т.п. Если вы единственный его разработчик - я бы не заморачивался и просто дописал сам этот $... метод к нужному классу, а если нет - ну, тогда, как уже сказали, только самому взять и переписать...
__________________
Hell is the possibility of sanity |
|
|||||
|
Цитата:
Цитата:
![]()
__________________
blog.diestro.ru Последний раз редактировалось iNils; 14.10.2008 в 11:51. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|