Ваше понимание верно. Подкласс также может использоваться в типе возвращаемого значения. Для параметров можно использовать суперклассы , а не подклассы.
Какой бы метод вы не использовали, вы в некотором роде «выполняете требование», не так ли? В этом случае для интерфейса требуется метод miya
, который принимает значение float
и может выдавать raexception
. Вы можете выполнить это несколькими способами.
Метод с именем miya
, который принимает float
, но выдает baexception
, выполняет требование. Почему? Вы можете думать об этом так: вызывающие метод ожидают, что ваш метод выбросит raexception
, поэтому они могут обработать raexception
. Теперь они могут справиться с baexception
? Конечно они есть! baexception
является подклассом raexception
.
Вы можете использовать ту же цепочку рассуждений, чтобы выяснить, почему вы можете использовать суперклассы в типах параметров и почему вы можете использовать подклассы в возвращаемых типах.
Что касается типов обертки, то просто, когда примитивный аргумент передается типу обертки, он должен быть в штучной упаковке. Вызывающие ваш метод ожидают, что в метод добавляются только примитивные аргументы, а не бокс. Вы должны думать о float
и Float
как о двух отдельных типах. Причина, по которой вы обычно можете конвертировать между ними в контексте присваивания, заключается в том, что компилятор хорош.