Можно ли переопределить метод универсального класса в Java?

0

Я знаю, что в C++ нет такой функции, как функция виртуальных шаблонов. Это связано с тем, что нам нужно знать записи в VTBL во время компиляции, и каждый тип шаблона компилируется отдельно.

Однако в Java я понимаю, что общий тип скомпилирован только один раз, который может включать переопределяющие методы общего класса. Это правда?

Если да, делает ли этот выбор дизайна?

Теги:
generics
inheritance
override

2 ответа

4

В Java нет классов шаблонов. Вместо этого он имеет Generics, которые являются обычными классами Java, которые имеют дополнительную информацию о типе во время компиляции, что позволяет компилятору выполнять проверки безопасности типов. После выполнения этих проверок информация об общих типах "стирается", а скомпилированный класс выглядит как любой другой класс.

  • 0
    Спасибо за ответ. Я знаю о стирании типа и как это работает. Я спрашиваю, могут ли методы универсального класса быть переопределены в подклассе (и имеет ли смысл даже рассматривать такой сценарий).
  • 1
    @Shookie Там нет такого понятия , как шаблон класса, только обычные классы , которые происходят , чтобы иметь общую информацию во время компиляции. Эти методы могут быть переопределены, как и любые другие методы (т. Е. До тех пор, пока они видимы и не являются final ). Взгляните на AbstractList<E> для примера.
Показать ещё 1 комментарий
1

Любой не окончательный, не закрытый, не статический метод может быть переопределен в подклассе, независимо от того, является он общим или нет. Эта работа, потому что тип на самом деле является ссылкой в каждом случае. Когда вы меняете тип, вы просто меняете тип ссылки.

BTW Все нестатические методы являются "виртуальными" на Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню