![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Есть такое строение классов:
из В обратиться в А? во всяком слачае вот такой способ:
Это сообщение отредактировал(а) ShurikA - 27.1.2007, 16:19 |
||||
|
|||||
Anklav |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.12.2003 Где: Менск Репутация: нет Всего: 1 |
объяви класс B не статическим:
статическому внутреннему классу ничего не известно о внешнем Это сообщение отредактировал(а) Anklav - 27.1.2007, 00:22 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Из статического внутреннего класса нельзя обращаться к не статическим полям и методам внешнего класса.
Чтобы из класса B обратиться к не статическому методу или полю класса А нужно чтобы класс А был не статическим. (А чтобы создать экземпляр внутреннего не статического класса необходимо прежде создать объект внешнего класса:
Это сообщение отредактировал(а) powerOn - 27.1.2007, 00:24 |
|||
|
||||
ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
ОК, допустим я переделываю public static class B в public class B то с этим классом всё нормално.
Но как только я пытаюсь зодать обьект класса В, вот таким образом:
когда ImgTmpl это В. то уже при работе проги (компиляцию она проходит хормално), вылетает ошибка:
и как с этом бороться? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Как это при работе? ![]() ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Извиняюсь моя ошибка, при компиляции. Добавлено @ 16:41 вот этот кусок кода:
|
|||
|
||||
ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Проблемма решилась, но правда каким то странным образом:
Создавать обьект нужно в таком слачае вот так:
когда dTmpl это типа класс А... Работает, но я не понимаю почему именно так... Кто то может пояснить, я явно тут чего то пропустил, в понимании. P.S. Мне сразу эта тема кое что напомнила: "У теоретиков ничего не работает, но они знают почему; у практиков всё работает, но не могу понять почему... У нас обычно ничего не работает, и мы не можем обьяснить почему!" ![]() |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В не статическом внутреннем классе есть ссылка на объект внешнего класса (enclosing instance). Эта ссылка всегда не null, если объект внутреннего класса создается в не статическом методе, то эта ссылка автоматом инициализируется указателем на объект в методе которого был вызван конструктор. А вот если создание происходит в статическом методе, то ссылку на объект базового класса надо передать явно, что и делает такой код:
P.S. Если dTmpl будет null то будет сгенерированно исключение NullPointerException. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Да, но в данный момент мои внутрение классы не статические.
Добавлено @ 17:15 и ещё одно, что это озночает: http://www.thecatalog.biz/servlet/apisserv...plate&tId=1 при этом компиляцию проходит без проблемм. |
|||
|
||||
powerOn |
|
||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ну а мой пост выше ты читал? К статическим полям/методам любого класса можно обращаться по их именам (если конечно область видимости позволяет). Если поле - то по имени поля, если метод - то по имени метода, если внутренний статический класс, то создать его экземпляр можно используя конструкцию:
если же внутренний класс не является статическим, а создать его хочется, то необходимо сначала создать экземпляр внешнего класса, а потом только экземпляр внутреннего:
Из внутреннего статического класса нельзя получить доступ к нестатическим полям и методам внешнего класса. Из внутреннего нестатического класса можно, используя конструкцию:
|
||||||||
|
|||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Значит ты или вызываешь конструктор внутреннего класса из статического метода, или из метода объекта который не является enclosing class для данного внутреннего класса.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Извините, но у меня уже руки опустились...
Проблеммы просто одна за другой. ![]() Добавлено @ 17:23 правильно ли вместо new OutterClassName(param...) воспользоваться уже созданным обьектом этого класса? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Да, можно воспользоваться. Дополнительно, следует учесть, что один экземпляр внешнего класса может иметь много экземпляров внутреннего класса. А экземпляры внутреннего класса могут менять поля своего внешнего класса. |
|||
|
||||
ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
ну вот притакой конфигурации вилетает ошибка показанная по ссылке...
|
|||
|
||||
ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
что бы это могло означать, при том что цтрока 98 это:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |