▁requirement ▁is ▁one ▁of ▁the ▁critic isms ▁of ▁down cast ing . ▁ ▁By ▁definition , ▁dynamic ▁type ▁checking ▁may ▁cause ▁a ▁program ▁to ▁fail ▁at ▁runtime . ▁In ▁some ▁programming ▁languages , ▁it ▁is ▁possible ▁to ▁anticip ate ▁and ▁recover ▁from ▁these ▁fail ures . ▁In ▁others , ▁type - check ing ▁errors ▁are ▁considered ▁fatal . ▁ ▁Program ming ▁languages ▁that ▁include ▁dynamic ▁type ▁checking ▁but ▁not ▁static ▁type ▁checking ▁are ▁often ▁called ▁" d ynam ically ▁typed ▁programming ▁languages ". ▁For ▁a ▁list ▁of ▁such ▁languages , ▁see ▁the ▁category ▁for ▁dynamically ▁typed ▁programming ▁languages . ▁ ▁Com bin ing ▁static ▁and ▁dynamic ▁type ▁checking ▁ ▁Some ▁languages ▁allow ▁both ▁static ▁and ▁dynamic ▁typing . ▁For ▁example , ▁Java ▁and ▁some ▁other ▁ost ens ibly ▁stat ically ▁typed ▁languages ▁support ▁down cast ing ▁types ▁to ▁their ▁sub types , ▁query ing ▁an ▁object ▁to ▁discover ▁its ▁dynamic ▁type , ▁and ▁other ▁type ▁operations ▁that ▁depend ▁on ▁runtime ▁type ▁information . ▁Another ▁example ▁is ▁C ++ ▁R TT I . ▁More ▁generally , ▁most ▁programming ▁languages ▁include ▁mechan isms ▁for ▁dispatch ing ▁over ▁different ▁' k inds ' ▁of ▁data , ▁such ▁as ▁dis joint ▁un ions , ▁runtime ▁polym orphism , ▁and ▁variant ▁types . ▁Even ▁when ▁not ▁interact ing ▁with ▁type ▁annotations ▁or ▁type ▁checking , ▁such ▁mechan isms ▁are ▁material ly ▁similar ▁to ▁dynamic ▁typing ▁implementations . ▁See ▁programming ▁language ▁for ▁more ▁discussion ▁of ▁the ▁interactions ▁between ▁static ▁and ▁dynamic ▁typing . ▁ ▁Object s ▁in ▁object -