Допустим, у вас есть Consumer<Dog>
и Consumer<Animal>
. Конечно, вы можете передать Dog
в любой из этих accept
методов, так как Dog
является Animal
.
Однако в Java нет отношений наследования между Consumer<Dog>
и Consumer<Animal>
по причинам, которые обсуждались на других вопросах на этом сайте. Таким образом, чтобы позволить нам связать любой другой Consumer
, который будет принимать Dog
, мы должны объявить его как Consumer<? super Dog>
.