|
|
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
В общем ситуация такая - имеем два класса, один унаследован от другого. Класс-потомок вызывает в своих методах методы супер-класса. В одном из методов, супер-класс вызывает другой метод, который также переопределен в классе-потомке. И вот тут то и начинается чехарда - супер-класс вызывает не свой метод, а метод класса-потомка . Пример Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Результат работы b.out(): AAA::out AAA::print BBB::print <---- вот эта срока меня повергает в шок. ее вообще не должно быть. BBB::out AAA::print BBB::print Проверил данный код - работает как нужно, т.е. в AAA::out вызывается именно AAA::print. Теперь собственно вопрос - можно ли как-то добиться того, чтобы супер-класс не вызывал методы потомка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:03 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
Собственно забыл указать, что проверял на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:05 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
Kandimus print(); // Тут почему-то вызывается метод BBB::out Точнее BBB::print? Kandimus BBB::print <---- вот эта срока меня повергает в шок. ее вообще не должно быть. Почему не должно? KandimusТеперь собственно вопрос - можно ли как-то добиться того, чтобы супер-класс не вызывал методы потомка? объявить методы родителя как final или private. Ну, и уделить немного времени самообразованию и таки почитать про виртуальные методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:10 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
KandimusСобственно забыл указать, что проверял на С++. Гениальный ход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:10 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
Мне как старому Сишнику не понятно, почему супер-класс вызывает метод класса-потомка, о котором он, кстати, нечего не должен знать. В С++ этот код работает нормально, и строки "ВВВ::print" нет (как и положено) авторТочнее BBB::print? Да, конечно. Очепятка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:13 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
Blazkowiczобъявить методы родителя как final или private. Если бы мне это было бы нужно, то я бы так и сделал. Но мне нужно поведение вызовов методов как в С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:14 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
KandimusМне как старому Сишнику не понятно, почему супер-класс вызывает метод класса-потомка, о котором он, кстати, нечего не должен знать. В С++ этот код работает нормально, и строки "ВВВ::print" нет (как и положено) В Java все не приватные, не статические и не финальные методы являются виртуальными . В отличие от C++, указывать конкретному методу является ли он виртуальным или нет - нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:23 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
BlazkowiczKandimusМне как старому Сишнику не понятно, почему супер-класс вызывает метод класса-потомка, о котором он, кстати, нечего не должен знать. В С++ этот код работает нормально, и строки "ВВВ::print" нет (как и положено) В Java все не приватные, не статические и не финальные методы являются виртуальными . В отличие от C++, указывать конкретному методу является ли он виртуальным или нет - нельзя. Все, понятно. Значить придется делать много дублирующего кода для предотвращения вызова переопределяемых методов в других методах, это плохо. Спс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:27 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
KandimusЗначить придется делать много дублирующего кода для предотвращения вызова переопределяемых методов в других методах, это плохо. Дык, спрашивайте как сделать без "дублирующего кода" - подскажем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:37 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
KandimusЗначить придется делать много дублирующего кода Сделайте финальные приватные методы и их публичные обертки. Обертки и переопределяйте. А если надо вызвать не переопределенный метод - вызываете приватный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 18:00 |
|
||
|
Переопределенные методы класса
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевKandimusЗначить придется делать много дублирующего кода Сделайте финальные приватные методы и их публичные обертки. Обертки и переопределяйте. А если надо вызвать не переопределенный метод - вызываете приватный. Да, спс. Пока ехал до дома пришел к такому же выводу. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 22:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38574389&tid=2127583]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 377ms |

| 0 / 0 |
