![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Ситуация примерно следующая:
Вызвать можно только описав "class ClassB extends ClassA"? Или есть другие более лёгкие пути? Дело в том, что ClassA в моём случае просто ОГРОМНЫЙ. И ОЧЕНЬ бы не хотелось расширять его. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Я правда не понял причем тут предок.
Сделать в классе B поле, которое является ссылкой на объект класса A. В момент создания B присвоить этому поле значение. И вызывать. Или наоборот - сделать ссылку на B в классе A. Вопрос написан мягко говоря слабо понятно. По словам вижу одно. По коду - совсем другое. |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Как как? Чё-то не очень понял
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
|
|||
|
||||
| Proger10 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
ну.. это через расширение. А я там говорил, что оно в моём случае не очень желательно.. |
||||
|
|||||
| AntonSaburov |
|
||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Я тоже не очень понимаю проблему. Попробую описать.
Класс A - большой. Значит можно сделать наследника B
Таким образом в классе B методов будет очень мало. |
||||
|
|||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
AntonSaburov
не-не.. то, что Вы сказали:
похоже, что подходит мне на 100%. Я просто не знаю какого типа должна быть переменная-поле в классе B и как ей присвоить и какое |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Я привёл два варианта реализации (классы В и С). В вероятнее будет работать чуть быстрее и требовать чуть меньше памяти.
Вариант С предпочтительнее если требуется скрыть ненужные public методы класса А. Тогда набрав в среде разработки
в подсказке увидишь только методы объявленные в C. Добавлено через 4 минуты В случае наследования никакой переменной для обращения к наследуемому классу создавать не нужно, она создаётся автоматически и называется super. |
|||
|
||||
| Proger10 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
У.. не, это совсем получится не то. Если Вы про это:
то мне вообще нужно вот что:
Это сообщение отредактировал(а) Proger10 - 28.1.2009, 16:36 |
||||
|
|||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Но лучше что нибудь такое:
Но в любом варианте прдётся модифицировать A. Это сообщение отредактировал(а) math64 - 28.1.2009, 17:18 |
||||
|
|||||
| Proger10 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
А как работает переменная super?
Вот например пример
И вот ClassA:
По сути, именно это я и хочу сделать. Но вот собсно результат
*только не надо спрашивать почему из Б нельзя просто вызвать GetMe() Добавлено: Поискал примеры использования super-переменной. Там везде через расширение класса.. Но расширение мне не подходит, к сожалению. Это сообщение отредактировал(а) Proger10 - 28.1.2009, 19:09 |
||||||
|
|||||||
| garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 3 Всего: 11 |
Хм, а вроде про статик метод никто и не сказал...
|
|||
|
||||
| math64 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Для класса ClassA не указано exteds, подразумевается extends Object, т.е. внутри ClassA - super это Object, а в нём нет метода GetMe. Испоравь так:
или
В этом случае ClassA неполный класс и писать ClassA a = new ClassA(); нельзя, нужно ClassA a = new ClassВ(); Добавлено @ 09:02 Конечно, если экземпляр ClassB не создается, можно всё в нём объявить static и писать
Это сообщение отредактировал(а) math64 - 29.1.2009, 09:03 |
||||||
|
|||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |