|
|
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Всем здрсте. Спотыкаюсь об одну и ту же граблю. Опять на полиморфизме, чтоб его... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. В ководстве по сдаче SCJP сказано: "polymorphism doesn’t apply to static methods." (стр. 177 "по бумаге", 215 по pdf). Из этой фразы делаю вывод, что решение о том, метод какого класса вызвать в выделенной строке, принимает компилятор. Но переменная хотя и объявлена относящейся к классу Gas, фактически же содержит объект класса NobleGas, и компилятор не может этого не видеть (справа от знака "="). Тогда почему он вызывает метод класса-предка ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:17:18 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
ozzmosis, потому что. вызывается статический метод. какого класса? - тип которого указан! не тулите полиморфизм к статическим методам классов, они для другого придуманы. В некоторых языках не дают возможность выполнить статический метод через экземпляр (только через класс), наверно специально, что бы не смущать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:47:51 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
ozzmosis, хотите фокус? Код: java 1. 2. 3. 4. и что тут компилятор увидит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:51:33 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Andrew1411В некоторых языках не дают возможность выполнить статический метод через экземпляр (только через класс), наверно специально, что бы не смущать :) +1 )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:57:54 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Andrew1411не тулите полиморфизм к статическим методам классов, они для другого придуманы.Вот я и хочу понять: почему так сделано, что статический метод класса-потомка "B", совпадающий по сигнатуре таким же методом в классе-предке "A", не может быть вызван так, как показано выше. По какой причине принятие решения о том, чей метод вызвать, распространяется только на instance-методы ? ivanraхотите фокус?Этот "фокус" слегка не в кассу, т.к. он касается возможности вызвать статический метод, обращаясь не к имени класса, а к имени объекта этого же класса. Это просто синтаксическая плюшка, не более того. Я же спросил про наследование и правило, по которому вызывается (или не вызывается) статический метод в классе-наследнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 19:30:50 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Сделано так, потому что это ООП. Придумайте свою парадигму и реализуйте ее как хотите. На мой взгляд, криво только то, что статический метод можно "дернуть" используя объект. Иногда это затрудняет чтение кода (именно поэтому рекомендуется использовать нормальный вызов через класс) Фокус, кстати, в кассу. Так как по вашей хотелке вызывался бы метод у неизвестного класса, экземпляр которого в данный момент не существует (null). А так, как и положено, вызывается статический метод указанного в типе переменной класса. Изучайте ООП и вам откроются "тайны полиморфизма". Наверно, если было "Классово-ориентированное программирование" ваш бред по поводу полиморфизма статических методов имел бы смысл, а так... мимо кассы. кто знает - работает, кто не знает - стремится получить сертификат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 19:57:23 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
ozzmosis, тебе ответили: Andrew1411не тулите полиморфизм к статическим методам классов, они для другого придуманы. комментарии будут? Или не читал ответы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 20:05:06 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Andrew1411Сделано так, потому что это ООП.И что с того, что "это ООП" ? Инстансы нельзя создать без соотв-щих классов. Написание instance-метода с совпадающей сигнатурой с методом класса-предка является переопределением (overriding'ом), а написание static-метода с совпадающей сигнатурой - уже нет. Вы можете объяснить, почему ООП ("Объектно-Ориентированное Программирование") диктует именно такой расклад ? Это "просто так сделали" в языке java или тут более фундаментальная причина ? Andrew1411 Придумайте свою парадигму и реализуйте ее как хотите.Не посылайте меня за ядом в аптеку, плз. Вопрос мой никакой агрессии не несёт :-) Andrew1411На мой взгляд, криво только то, что статический метод можно "дернуть" используя объект. Иногда это затрудняет чтение кода (именно поэтому рекомендуется использовать нормальный вызов через класс)Бесспорно. Лучше бы заткнули эту "фичу". Andrew1411Фокус, кстати, в кассу. Так как по вашей хотелке вызывался бы метод у неизвестного класса, экземпляр которого в данный момент не существует (null). А так, как и положено, вызывается статический метод указанного в типе переменной класса.Как это "неизвестного" класса ?? Как раз если бы была только одна возможность, о которой вы выше сказали, т.е. вызвать метод класса с непременным указанием названия этого Класса - почему он тогда "неизвестный"-то ? Andrew1411Изучайте ООП и вам откроются "тайны полиморфизма".Дык штудирую, оттого и вопросы лезут :-) Andrew1411кто знает - работает, кто не знает - стремится получить сертификатА тот, кто "знает" - он с самого рождения это всё "знает", да ? ;-) Сертификат для меня не самоцель. Просто книга эта радикально отличается от всех прочих, что довелось осиливать. Капитальная она. Читаю с удовольствием, не спеша, по второму кругу попёр - сразу всего там не осилить. Petro123не читал ответы? я читаю ответы. Если ясности нет, то вправе спросить еще, КМК. Здесь вроде бы форум... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 20:35:11 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
ozzmosis, сожалею о своих излишне жестких высказываниях. на самом деле, все просто: Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта Статические члены класса не имеют никакого отношения к объектам. они не являются частью объектов, просто объекты могут их использовать. Соответственно, то что не является частью объекта не обязано поддерживать свойства частей объектов. Статические объекты никаким боком не касаются интерфейсов объектов (и, именно поэтому в интерфейсах не возможно написать статический метод. В нарушении этого, правда в джаве существуют финальные статические переменные у интерфейсов, но они выполняю лишь роль "эмуляторов констант") Проведите черту между ОБЪЕТАМИ и НЕ ОБЪЕКТАМИ. тогда у вас станет все на место. Общий совет: Изучайте ООП не на базе конкретного языка, а на базе фундаментальных трудов. Реализации отличаются, вы, по незнанию, можете частный случай принять за общее правило. Вызов статического метода на объекте а не на классе - как раз таки частный случай реализации. Просто поймите, что это НЕ ООП, это просто его не нарушает, хоть и может запутать. За сим откланиваюсь и покидаю эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:03:52 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Andrew1411Статические объекты никаким боком ... читать как: Статические члены класса, никаким боком ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:06:35 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
Andrew1411, спасибо за разъяснения, наконец-то понятнее стало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 21:25:02 |
|
||
|
Вопрос по вызову статич. метода, объявленного как в классе-предке, так и в его наследнике
|
|||
|---|---|---|---|
|
#18+
PS. а всё-таки подозрение, что "можно было по-всякому, но в java сделали вот ТАК, да и всё тут" - было у мну неспроста ... Ну да ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 00:47:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38391836&tid=2128632]: |
0ms |
get settings: |
20ms |
get forum list: |
27ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
48ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 331ms |
| total: | 559ms |

| 0 / 0 |
