![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
Как так сделать?
Что за хрень? Даже переменную обьявить перед вызовом конструктора нельзя?
|
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Как минимум один из конструкторов Вашего объекта не будет содержать this и будет явно или не явно вызывать super.
Суть в том, что пока Вы не вызвали super, ничего касающегося Вашего инстенса, использовать нельзя. |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
А почему даже переменную обьявить нельзя?
Как создать в конструкторе обьект, сохранить его в поле и передать его конструктору родителя? |
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
myobj(){ super(new String()); getMyString(); // superclass method } если Вы значение поля просовываете в суперкласс, то, очевидно, само поле должно быть объявлено тоже в суперклаccе. думаю потому, что до вызова super память под объект еще не выделена. Хранить переменные негде. Подумал, - к локальным переменным это никакого отношения не имеет, т.к. они хранятся в общем стеке программы. Это сообщение отредактировал(а) priam220 - 13.6.2012, 15:57 |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
||||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
protected в FilterOutputStream, поле out. Это сообщение отредактировал(а) priam220 - 13.6.2012, 15:28 |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
Ну а предположим, он бы там не сохранялся, что тогда?
|
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Тогда Вам бы пришлось наследоваться от другого класса или реализовывать все с нуля. Но поскольку ядро пишется программистами высокого класса, то можно быть уверенным на 99.(9)%, что все что нужно в классе, согласно его назначению, в нем будет.
Это сообщение отредактировал(а) priam220 - 13.6.2012, 15:49 |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
Ну а если бы не ядро? Печально. Плюс повышается связность кода, если бы в новой версии переменная больше не называлась out, то код бы перестал работать. out - OutputStream, а не ByteArrayOutputStream. Что с ним сделать - вручную сконвертировать? А если я в классе заведу переменную out, она не перезапишет out для родительского класса? Это сообщение отредактировал(а) Karadul - 13.6.2012, 16:02 |
|||
|
||||
| priam220 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
если бы такое предусматривалось, то она была бы private.
все зависит от того, чего Вы хотите добиться.
нет. Это сообщение отредактировал(а) priam220 - 13.6.2012, 16:50 |
||||||
|
|||||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
А тут как сделать?
in в родительском классе можно как-то перезаписать? То есть, все, что protected - задумано для наследования? Вообще, наследование все-таки не самый чистый метод. Упаковщик / распаковщик пакетов. Вы это имели в виду? Это сообщение отредактировал(а) Karadul - 13.6.2012, 16:52 |
|||
|
||||
| priam220 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
а так слабо?
вы просто подумайте какой функционал и какого класса вы хотите расширить и для чего. Посмотрите сырцы java stream'ов. Это сообщение отредактировал(а) priam220 - 13.6.2012, 17:28 |
||||
|
|||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
||||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
думаю еще вам нужно прочитать какую-нибудь книжку по ООП.
Это сообщение отредактировал(а) priam220 - 13.6.2012, 17:48 |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
Так можно так сделать или нет?
ООП в яве какой-то сложный. По сравнению с питоном по краней мере. Кроме этого решения, мне приходит в голову только implements и прокидывание вызовов DataInputStream. Куча копипаста. Это сообщение отредактировал(а) Karadul - 13.6.2012, 18:16 |
|||
|
||||
![]()
|
| Правила форума "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. |