▁write ▁is ▁that ▁in ▁a ▁call ▁like ▁, ▁selecting ▁the ▁correct ▁implementation ▁of ▁ ▁really ▁depends ▁on ▁the ▁runtime ▁type ▁of ▁both ▁ ▁and ▁, ▁but ▁in ▁a ▁conventional ▁O O ▁language ▁only ▁the ▁runtime ▁type ▁of ▁ ▁is ▁taken ▁into ▁account . ▁In ▁a ▁language ▁with ▁Common ▁L isp ▁Object ▁System ▁( CL OS )- style ▁multiple ▁dispatch , ▁the ▁comparison ▁method ▁could ▁be ▁written ▁as ▁a ▁generic ▁function ▁where ▁both ▁arguments ▁are ▁used ▁for ▁method ▁selection . ▁ ▁Giuseppe ▁Cast agna ▁observed ▁that ▁in ▁a ▁typed ▁language ▁with ▁multiple ▁dispatch , ▁a ▁generic ▁function ▁can ▁have ▁some ▁parameters ▁which ▁control ▁dispatch ▁and ▁some ▁" left - over " ▁parameters ▁which ▁do ▁not . ▁Because ▁the ▁method ▁selection ▁rule ▁cho oses ▁the ▁most ▁specific ▁applicable ▁method , ▁if ▁a ▁method ▁over rides ▁another ▁method , ▁then ▁the ▁overrid ing ▁method ▁will ▁have ▁more ▁specific ▁types ▁for ▁the ▁cont rolling ▁parameters . ▁On ▁the ▁other ▁hand , ▁to ▁ensure ▁type ▁safety ▁the ▁language ▁still ▁must ▁require ▁the ▁left - over ▁parameters ▁to ▁be ▁at ▁least ▁as ▁general . ▁Using ▁the ▁previous ▁termin ology , ▁types ▁used ▁for ▁runtime ▁method ▁selection ▁are ▁cov ari ant ▁while ▁types ▁not ▁used ▁for ▁runtime ▁method ▁selection ▁of ▁the ▁method ▁are ▁cont rav ari ant . ▁Con vent ional ▁single - dispatch ▁languages ▁like ▁Java ▁also ▁obey ▁this ▁rule : ▁there ▁only ▁one ▁argument ▁is ▁used ▁for ▁method ▁selection ▁( the ▁receiver ▁object , ▁passed ▁along ▁to ▁a ▁method ▁as ▁the ▁hidden ▁argument ▁), ▁and ▁indeed ▁the ▁type