| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Наследование |
| Автор: Karadul 13.6.2012, 10:55 | ||
| Как так сделать? Что за хрень? Даже переменную обьявить перед вызовом конструктора нельзя?
|
| Автор: priam220 13.6.2012, 12:40 |
| Как минимум один из конструкторов Вашего объекта не будет содержать this и будет явно или не явно вызывать super. Суть в том, что пока Вы не вызвали super, ничего касающегося Вашего инстенса, использовать нельзя. |
| Автор: Karadul 13.6.2012, 13:36 |
| А почему даже переменную обьявить нельзя? Как создать в конструкторе обьект, сохранить его в поле и передать его конструктору родителя? |
| Автор: Karadul 13.6.2012, 15:06 | ||
А без этого никак? В примере из первого поста я хочу сохранить buf и при этом получить все методы из DataOutputStream. Как это сделать? |
| Автор: priam220 13.6.2012, 15:25 | ||
protected в FilterOutputStream, поле out. |
| Автор: Karadul 13.6.2012, 15:37 |
| Ну а предположим, он бы там не сохранялся, что тогда? |
| Автор: priam220 13.6.2012, 15:48 |
| Тогда Вам бы пришлось наследоваться от другого класса или реализовывать все с нуля. Но поскольку ядро пишется программистами высокого класса, то можно быть уверенным на 99.(9)%, что все что нужно в классе, согласно его назначению, в нем будет. |
| Автор: Karadul 13.6.2012, 15:52 | ||
Ну а если бы не ядро? Печально. Плюс повышается связность кода, если бы в новой версии переменная больше не называлась out, то код бы перестал работать. out - OutputStream, а не ByteArrayOutputStream. Что с ним сделать - вручную сконвертировать? А если я в классе заведу переменную out, она не перезапишет out для родительского класса? |
| Автор: priam220 13.6.2012, 16:03 | ||||||
если бы такое предусматривалось, то она была бы private.
все зависит от того, чего Вы хотите добиться.
нет. |
| Автор: Karadul 13.6.2012, 16:37 | ||
А тут как сделать?
in в родительском классе можно как-то перезаписать? То есть, все, что protected - задумано для наследования? Вообще, наследование все-таки не самый чистый метод. Упаковщик / распаковщик пакетов. Вы это имели в виду? |
| Автор: priam220 13.6.2012, 17:24 | ||||
а так слабо?
вы просто подумайте какой функционал и какого класса вы хотите расширить и для чего. Посмотрите сырцы java stream'ов. |
| Автор: Karadul 13.6.2012, 17:37 | ||
Слабо. Я не хочу, чтобы при чтении могло выйти за границу пакета.
То, что есть, меня вполне устраивает. |
| Автор: priam220 13.6.2012, 17:41 |
| думаю еще вам нужно прочитать какую-нибудь книжку по ООП. |
| Автор: Karadul 13.6.2012, 18:15 |
| Так можно так сделать или нет? ООП в яве какой-то сложный. По сравнению с питоном по краней мере. Кроме этого решения, мне приходит в голову только implements и прокидывание вызовов DataInputStream. Куча копипаста. |
| Автор: Karadul 14.6.2012, 20:21 |
| Ап. Есть еще предложения? |
| Автор: Karadul 16.6.2012, 12:29 |
Думаю, Вы и сами-то не знаете. P.S. Вы при обращении к одному человеку пишется с большой буквы: Вы. |