|
|
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Output: Код: plaintext 1. Да, я знаю конечно же, что нельзя оставлять поля класса доступными для чтения/изменения. Но с какого перепугу ява лезет за значениями полей в базовый класс (Root2), игнорируя фактический тип объекта (Derv2) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 17:50:40 |
|
||
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
Здрасте. Поля не обладают полиморфизмом. Только методы и свойства, что в Java одно и тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 17:53:12 |
|
||
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЗдрасте. Поля не обладают полиморфизмом. Только методы и свойства, что в Java одно и тоже. Я как всегда налажал с разбега. Тут не такая простая терминология. Полиморфизм можно разделить на статический и динамический. Динамический полиморфизм реализован черед таблицу виртуальных методов. Что позволяет вызывать метод класса, по экземпляру. Статический полиморфизм реализуется ещё на этапе компиляции. Компилятор связывает код x.rm с коркретным полем Root.rm. Это два разных поля - Root.rm и Derv.rm. Компилер понятия не имеет что у вас там может быть Derv. И связывает поле по типу переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 18:00:02 |
|
||
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
Тогда еще вопрос. Вот добавил я строку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И получаю на выходе: Код: plaintext 1. То, что при выводе ((Derv2)x).rm ява полезла уже в класс Derv2 - это на самом деле был создан "на лету" новый (еще один!) объект класса Derv2 или сработал полиморфизм и ява "поняла", что можно юзать тот же самый объект 'x', который был ранее создан ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 18:03:03 |
|
||
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
ozzmosisТо, что при выводе ((Derv2)x).rm ява полезла уже в класс Derv2 - это на самом деле был создан "на лету" новый (еще один!) объект класса Derv2 или сработал полиморфизм и ява "поняла", что можно юзать тот же самый объект 'x', который был ранее создан ? Там где не работает полиморфизм, Java использует hiding. Поле Derv.rm как бы скрывает поле Root.rm. Тут же явно задано что нужно поле из Derv. Компилер это понимает и связывает рантайм с конкретным полем конкретного класса. Опять же во время компиляции. В рантайме тут ничего не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 18:07:57 |
|
||
|
Странный какой-то полиморфизЬм...
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2013, 18:08:32 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38252210&tid=2129397]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 268ms |
| total: | 400ms |

| 0 / 0 |
