Задать вопрос
@stanislav_studzinskiy

Разве не все методы класса-родителя используют при ссылке на объект класса-наследника мостовые методы?

Добрый день. Читал главу Хорстманна об обобщениях, там рассказывалось о принципе действия мостовых методов для обобщенных методов.
(класс Pair - просто обобщенный класс с двумя полями переменного типа)

class Datelnterval extends Pair<Date>
{
  public void setSecond(Date second){
    if (second.compareTo(getFirst()) >= 0)
      super.setSecond(second);
}
• • •
}
public static void main(String[] args){
  Datelnterval interval = new Datelnterval(. . .);
  Pair<Date> pair = interval; // допускается присваивание суперклассу
  pair.setSecond(aDate) ;
}


Предполагается, что вызов метода setSecond () является полиморфным, и поэ­
тому вызывается соответствующий метод. А поскольку переменная pair ссылается
на объект типа Datelnterval, это должен быть вызов Datelnterval. setSecond ().
Но дело в том, что стирание типов мешает соблюдению принципа полиморфизма.
В качестве выхода из этого затруднительного положения компилятор формирует сле­
дующий мостовой метод в классе Datelnterval:
public void setSecond(Object second) { setSecond((Date) second); }
Для того чтобы стал понятнее этот механизм, проанализируем выполнение при­
веденного ниже оператора.
pair.setSecond(aDate)
В объявлении переменной pair указан тип Pair, и к этому типу отно­
сится только один метод под именем setSecond, а именно setSecond (Object).
Виртуальная машина вызывает этот метод для того объекта, на который ссылается
переменная pair. Этот объект относится к типу Datelnterval, и поэтому вызыва­
ется метод Datelnterval. setSecond (Object). Именно он и является синтезирован­
ным мостовым методом. Ведь он, в свою очередь, вызывает метод Datelnterval.
setSecond (Date), что, собственно говоря, и требуется.


Хочется узнать, разве имея ссылку родительского класса на объект наследника, где и тот и другой без переменных класа, не выполняется такая же процедура (очевидно, что не выполняется, раз именно в этой главе описываются эти самые мостовые методы) ?

Прошу прощения, если вопрос поставлен некорректно, оперируемые структуры кажутся довольно запутанными.
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы