Объясните полиморфизм в Java? - PullRequest
0 голосов
/ 09 апреля 2011

С учетом заявления

A m = new B();

и зная, что класс B является подклассом класса A, а A является подклассом Object, объясните, что происходит при оценке заявления.

Большое спасибо заранее!

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

Самый простой ответ заключается в том, что, поскольку B является подклассом A, эта оценка может происходить нормально.

Указатель на базовый класс может очень просто указывать на производный класс, поскольку производный класс является экземпляромбазового класса.

Давайте расширим пример немного подробнее:

 A m;
 B n = new B();
 m = n; // Valid statement

m = n является допустимым оператором, потому что мы можем назначить только объект A для m.Компилятор видит, что B является производным от A, поэтому в действительности он является объектом A.Если бы это был не связанный тип, компилятор кричал бы на вас.

0 голосов
/ 09 апреля 2011

RTTI это слово. Идентификация типов во время выполнения.
Я рекомендую вам "Мышление на Яве" Брюса Эккеля

0 голосов
/ 09 апреля 2011
  • Создана переменная с именем m типа A
  • Создан объект типа B
  • Переменной m назначена ссылкак созданному объекту

Вы можете ссылаться на m, как если бы он имел тип A без приведения.Это означает, что вы можете вызывать любые методы, которые определены в A;если они переопределены, вместо этого вызывается версия метода B.Однако вы не можете вызывать методы, специфичные для B, если только вы не используете приведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...