Это не тип параметра, который определяет, какой из них вызывается, это тип объекта. Таким образом, все зависит от того, был ли вы создан или передан в PassangerPlane или CargoPlane методу, вызывающему addAMeasurableThing. Это более сложный вопрос о том, как обеспечить, чтобы у вас был только нужный тип Измеримых, чтобы войти в плоскость. Например, вы можете просто сгенерировать исключение, если будет добавлено неверное измеримое значение, а затем еще выше по стеку вызовов проинформировать пользователя о проблеме. Это зависит от того, что определяет Измеримые объекты, которые должны быть переданы в Самолет.
Вам также может потребоваться статический метод в самолете (или новый класс AirplaneFactory), который возвращает вам правильный подкласс в зависимости от образца Mesurable, который вы передаете.