public <K extends ClassB> K someMethod(T t) {
return null;
}
Вы даете гарантию звонящим здесь. Вы говорите им: «Независимо от того, с каким подклассом SuperClass
мы работаем, этот метод вернет значение, которое можно безопасно рассматривать как любой подкласс ClassB
». Тогда ваш подкласс Main
приходит и нарушает это обещание, делая версию, которая возвращает только ClassA
, что является прямым нарушением заключенного вами контракта. Общие объявления extends
/ super
являются обещаниями для вызывающей стороны , а не для лица, расширяющего код.