![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Посмотрите внимательно на этот код:
Угадайте, что выведется в консоль? Меня интересует вопрос почему именно такой вывод? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Надо было данный вопрос в тему "Маленький тест" написать
|
|||
|
||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
На первый взгляд должно получиться TREE#foo, но надо проверить...
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Если бы было, автор бы не отписывал.
|
|||
|
||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
А вот фиг вам! Выводится TEST#foo... А вот почему?.. Надо подумать.
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Мда... Royan, молоток. Никогда бы не подумал о подобных граблях.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| mindflyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.10.2004 Где: Smolensk, Russia Репутация: 1 Всего: 4 |
ИМХО.
Для компилятора здесь нет сравнения приоритетов, ибо в классе Test только одна подходящая функция. Чтобы заработало иначе, нужно либо создать как
либо добавить метод void foo(String a) в класс Test либо
В компиляторах слабо разбираюсь, но могу предположить, что в данном случае компилятор в классе Test находит только одну функцию с подходящей сигнатурой, её и прописывает. А вот если вызвать ту же строчку кода но на прикастенном к Tree объекте, он уже будет анализировать обе функции. То же самое, если создать аналогичную функцию в классе Test Это сообщение отредактировал(а) mindflyer - 18.10.2007, 08:44 |
||||
|
|||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
batigoal, Royan просто к экзамену готовится, поэтому всякие странные вопросы из теста и спрашивает.
mindflyer, абсолютно верно. -------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Зато какой брейн сторм!!! Молот Royan!!!
|
|||
|
||||
| pompei |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 1 Всего: 6 |
Да действительно так и работает. Но этоже вообще тупой глюк компилятора.
Чё за ерунда: Пишешь: Test a = new Tree(); Печатается: TEST#foo Пишешь: Tree a = new Tree(); Печатается: TREE#foo Лажа какая-то. Вообще доложно быть так, что выбор метода должен зависеть только от типа объекта, а тут ещё есть зависимость от типа переменной. --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
| jsse |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 1.5.2006 Где: Кривой Рог Репутация: нет Всего: 2 |
Это не глюк компилятора, а полиморфизм )
добавить к примеру в класс Tree функцию bar(String a) вызвать из main() a.bar("a");
Такой код даже не скомпилируется, потому что компилятор будет искать метод в классе Test. |
|||
|
||||
| pompei |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 1 Всего: 6 |
А да точно, с компилатором всё нормально. jsse! +1
Только всё равно косях с их стороны остаётся: необходимо было предусмотреть такую неоднозначность, например, запрещать компилировать класс Tree из-за того что возникает эта неоднозначность. Т.е. ввести какое-нибудь правило типа: нельзя создавать многоаргументный метод, которому могут подходить родительские методы по спецификации вызова, и нельзя создавать метод, который подходит к какому-нибудь родительскому многоаргументному методу по спецификации вызова. Вот! --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Э... не вижу логики. Почему компилятор должен запретить компиляцию класса, который расширяет уже имеющийся? Я бы в данном случае запрещал компиляцию именно Test, т.к. в его коде идёт попытка вызвать несуществующий метод. Что, в общем-то, и делает компилятор. Мы с ним в этом вопросе выбрали одну точку зрения. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Что-то у меня появилось непреодолимое желание забанить этого анонимного рекламодателя.
Добавлено через 3 минуты и 16 секунд Хм... это что, новая фишка форума - реклама от гугля в виде ответа в теме? -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
||||
|
||||
![]()
|
| Правила форума "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. |