Опция getOrElse Тип ошибки несоответствия

Состояние JLS в §8.4.9 Перегрузка :

  1. Когда метод вызывается (§15.12), количество фактических аргументов (и любого явного типа аргументы), а во время компиляции используются параметры времени компиляции, чтобы определить подпись метода, который будет вызываться (§15.12.2).
  2. Если метод, который должен быть invoked - это метод экземпляра, фактический метод, который будет вызываться, будет определен во время выполнения, используя динамический поиск метода (§15.12.4).

Итак, в вашем случае:

  1. Аргумент метода (this) имеет тип времени компиляции Parent, и поэтому вызывается метод print(Parent).
  2. Если класс Worker был подклассом и подкласс будет переопределять этот метод, а экземпляр worker - этого подкласса, тогда будет вызван переопределенный метод.

Двойная отправка не существует на Java. Вы должны имитировать его, например. используя шаблон посетителя . В этом шаблоне, в основном, каждый подкласс реализует метод accept и вызывает посетителя с this в качестве аргумента, а this имеет подкласс типа времени компиляции, поэтому используется перегрузка требуемого метода.

19
задан kiritsuku 1 November 2012 в 22:11
поделиться