Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полиморфизм... вызов метода производится по, неясной схеме 
V
    Опции темы
Royan
Дата 19.10.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Собственно схема не ясна для меня... поэтому, пожалуйста, объясните с какой стати метод print именно класса A вызывается в данном примере (см. вниз)

Код

public class Test {
    public static void main(String[] args) {
        A b1 = new B();
        b1.print(new C()); // вот тут происходит вызов A#print()
    }
}

class A {
    void print(A a) {
        System.err.println("A");
    }
}

class B extends A {
    void print(B a) {
        System.err.println("B");
    }
}

class C extends B {
}



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 19.10.2007, 00:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Royan @  19.10.2007,  00:26 Найти цитируемый пост)
Собственно схема не ясна для меня... поэтому, пожалуйста, объясните с какой стати метод print именно класса A вызывается в данном примере (см. вниз)

Метод B.print() не замещает метода A.print() - у них не совпадают сигнатуры. Если вы добавите аннотацию @Override  к методу B.print() - получите ошибку компиляции.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Royan
  Дата 19.10.2007, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Но разве сконструированный в результате A b1 = new B(); не является экземпляром класса B? Является! Так почему тогда метод вызывается у класса A?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
nornad
Дата 19.10.2007, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Royan @  19.10.2007,  04:15 Найти цитируемый пост)
Но разве сконструированный в результате A b1 = new B(); не является экземпляром класса B? Является!

Не совсем. b1 - то A, потому что ты его так и объявил. И методы В, соответственно, недоступны. Сигнатура методов не совпадает, поэтому B::print не замещает A::print. Следовательно, вызвать мы можем только A::print.
Добавь A::print(B b) - тогда замещение уже будет иметь место и за счёт более точного соответствия переданного объекта сигнатуре нового метода и переопределения этого метода в В, будет вызван В::print.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
pompei
Дата 19.10.2007, 04:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 1
Всего: 6



Это вообще два разных метода. Вы вызываете первый вот он и вызывается.

Вопрос крутым явистам: кто сможет вызвать метод B::print?

--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
nornad
Дата 19.10.2007, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(pompei @  19.10.2007,  07:43 Найти цитируемый пост)
Вопрос крутым явистам: кто сможет вызвать метод B::print?

Каждый первый крутой и каждый второй постепенно крутеющий. smile
Код

((B)b1).print(new C());

Так сойдёт?


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
pompei
Дата 19.10.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 1
Всего: 6



Да нормально!
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
Royan
Дата 19.10.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Окей разобрался 
nornad, спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.