▁a ▁t ighter ▁bound , ▁for ▁example ▁ ▁is ▁a ▁sub type ▁of ▁. ▁This ▁shows ▁that ▁wild card ▁types ▁are ▁cov ari ant ▁in ▁their ▁upper ▁bounds ▁( and ▁also ▁cont rav ari ant ▁in ▁their ▁lower ▁bounds ). ▁In ▁total , ▁given ▁a ▁wild card ▁type ▁like ▁, ▁there ▁are ▁three ▁ways ▁to ▁form ▁a ▁sub type : ▁by ▁special izing ▁the ▁class ▁, ▁by ▁specifying ▁a ▁t ighter ▁bound ▁, ▁or ▁by ▁replacing ▁the ▁wild card ▁ ▁by ▁a ▁specific ▁type ▁( see ▁figure ). ▁ ▁By ▁combining ▁two ▁steps ▁of ▁sub ty ping , ▁it ▁is ▁therefore ▁possible ▁to ▁e . g . ▁pass ▁an ▁argument ▁of ▁type ▁ ▁to ▁a ▁method ▁expecting ▁a ▁. ▁This ▁is ▁exactly ▁the ▁kind ▁of ▁programs ▁that ▁cov ari ant ▁interface ▁types ▁allow . ▁The ▁type ▁ ▁acts ▁as ▁an ▁interface ▁type ▁containing ▁only ▁the ▁cov ari ant ▁methods ▁of ▁, ▁but ▁the ▁implement er ▁of ▁ ▁did ▁not ▁have ▁to ▁define ▁it ▁ahead ▁of ▁time . ▁This ▁is ▁use - site ▁variance . ▁ ▁In ▁the ▁common ▁case ▁of ▁a ▁generic ▁data ▁structure ▁, ▁cov ari ant ▁parameters ▁are ▁used ▁for ▁methods ▁getting ▁data ▁out ▁of ▁the ▁structure , ▁and ▁cont rav ari ant ▁parameters ▁for ▁methods ▁putting ▁data ▁into ▁the ▁structure . ▁The ▁m nem onic ▁for ▁Produ cer ▁Ext ends , ▁Cons umer ▁Super ▁( PE CS ), ▁from ▁the ▁book ▁Effect ive ▁Java ▁by ▁Josh ua ▁Blo ch ▁gives ▁an ▁easy ▁way ▁to ▁remember ▁when ▁to ▁use ▁cov ar