powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / super.super.method
19 сообщений из 19, страница 1 из 1
super.super.method
    #38752590
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ,Уважаемы форумчане.
Кто знает как вызвать super.метод прапредка.

типа super,super.myfunction()

Я бы использовал рефлексию
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 try {
            Class superSuperClass =
                this.getClass().getSuperclass().getSuperclass();
            superSuperClass.getMethod("buildtab").invoke(this);
        } catch (InvocationTargetException ite) {
                       ite.printStackTrace();
        } catch (IllegalAccessException iae) {}
        } catch (NoSuchMethodException nsme) {
                       nsme.printStackTrace();
        }




Но это работает только для public методов....а у меня,блин protected buildtab();
...
Рейтинг: 0 / 0
super.super.method
    #38752786
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Переделать, чтобы не возникало странного желания;
2. Добавить свои классы или отдельный класс-посредник в чужой пакет, чтобы иметь возможность напрямую вызывать защищённые методы.
...
Рейтинг: 0 / 0
super.super.method
    #38752833
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. setAccessible же, но переделать все-таки лучше.
...
Рейтинг: 0 / 0
super.super.method
    #38752853
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызов super.super - это нарушение инкапсуляции же.
если так хочется объехать super, то может имеет смысл наследоваться не от него, а от super.super?
...
Рейтинг: 0 / 0
super.super.method
    #38752865
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, нормальные языка (C++) такое позволяют. Явно указать класса, из которого нужно вызывать метод. Т.ч. я бы не сказал, что это уж настолько "странное желание". IMHO
...
Рейтинг: 0 / 0
super.super.method
    #38752875
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВообще, нормальные языка (C++) такое позволяют. Явно указать класса, из которого нужно вызывать метод. Т.ч. я бы не сказал, что это уж настолько "странное желание". IMHO

Я бы тоже сказал,что ничего особенного нет.Так получилось,что удобнее всего наследовать от одного класса в котором перекрыт метод.Там 95% нужного решения.Но один метод нужен прапредка.(Я думаю у любого разработчика могут так карты лечь)

Не думал,что спустится на 2 этажа ниже будет так сложно.
...
Рейтинг: 0 / 0
super.super.method
    #38752922
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВообще, нормальные языка (C++) такое позволяют. Явно указать класса, из которого нужно вызывать метод.Проблема не в указании класса, а в правах доступа к методам класса.
В тех же плюсах вы запаритесь вызывать приватную функцию, если автор класса не объявил вашу функцию дружественной.
...
Рейтинг: 0 / 0
super.super.method
    #38753120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно был топик где чел ну ооочень хотел избавиться от private. Ну как-то вот так вобщем.

Видать тяжко юзать ООП-парадигмы. Может и не нужны они вовсе?
...
Рейтинг: 0 / 0
super.super.method
    #38753173
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ограничивать ООП только наследованием - безусловно.
...
Рейтинг: 0 / 0
super.super.method
    #38753381
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alКто знает как вызвать super.метод прапредка.
типа super,super.myfunction()Может лучше отрефакторить?
Чтобы пропала необходимость дёргать super.super
...
Рейтинг: 0 / 0
super.super.method
    #38753393
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alНо это работает только для public методов....а у меня,блин protected buildtab();
setAccessible(true);

Но, в целом, лучше отрефакторить.
...
Рейтинг: 0 / 0
super.super.method
    #38753409
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в этой цепочке superSuper-> super -> thisClass был правильно имплементирован и абстрагирован
метод buildtab то не было-бы необходимости драть гланды через задний проход.
...
Рейтинг: 0 / 0
super.super.method
    #38753411
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли в этой цепочке superSuper-> super -> thisClass был правильно имплементирован и абстрагирован
метод buildtab то не было-бы необходимости драть гланды через задний проход.
Конечно. Очевидно что LSP нарушен.
...
Рейтинг: 0 / 0
super.super.method
    #38753419
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczirbis_alНо это работает только для public методов....а у меня,блин protected buildtab();
setAccessible(true);

Но, в целом, лучше отрефакторить.

setAccessible(true) Для полей а не методов...с методами не работает я..проверял.
...
Рейтинг: 0 / 0
super.super.method
    #38753428
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alsetAccessible(true) Для полей а не методов...с методами не работает я..проверял.
Фу, блин. Запутал ты меня своей рефлексией. Работает и для методов. Просто вызвать его всё равно не выдет, так как метод виртуальный и переопределен.
...
Рейтинг: 0 / 0
super.super.method
    #38753431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al , вобщем рефакторь пока старуха Лисков не побила тебя своим костылём за незнание
основ.
...
Рейтинг: 0 / 0
super.super.method
    #38753439
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczirbis_alsetAccessible(true) Для полей а не методов...с методами не работает я..проверял.
Фу, блин. Запутал ты меня своей рефлексией. Работает и для методов. Просто вызвать его всё равно не выдет, так как метод виртуальный и переопределен.

У меня падает с ошибкой NoSuchMethod...т.е он его не видит.(что есть setAccessible(true) что нет NoSuchMethod.) (возможно потому что java 6)
...
Рейтинг: 0 / 0
super.super.method
    #38753841
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае это делается так.

Делаем экземпляр класса предок аналогичный потомку.
Запускаем у него нужный метод.
Меняем потомок аналогично тому как изменился предок.

Долго, дорого неэффективно, зато все при деле. :)
...
Рейтинг: 0 / 0
super.super.method
    #38753915
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВ общем случае это делается так.

Делаем экземпляр класса предок аналогичный потомку.
Запускаем у него нужный метод.
Меняем потомок аналогично тому как изменился предок.

Долго, дорого неэффективно, зато все при деле. :)

Да не ....ну всё просто.
в предке сделал

buildtab1() {
super.buildtab()
}

а в потомке (текущем классе из-за которого сыр-бор)

buildtab() {super.buildtab1()}

Я это сразу сделал...просто потом задался мыслью...возможно я чего-то недогоняю и есть метод super,super.mymethod
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / super.super.method
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]