„Moje je: Jazyk je (čistě) staticky typovaný…“
Podle téhle definice by staticky typovaný jazyk byl dost na nic, protože by v něm nešlo napsat např. následující konstrukci:
Object o = …;
if (o instanceof Opice) {
Opice op = (Opice)o;
//TODO: dělej něco s opicí…
} else {
//TODO: dělej něco s objektem
}
Případně by kompilátor musel rozumět všem těm podmínkám a kontrolám (instanceof), které programátor provádí a na základě nich si říct, že přetypování je možné – jenže ty kontroly mohou být daleko složitější, takže se obávám, že žádný tak chytrý kompilátor neexistují – „typovou chybu“ za běhu tedy nelze nikdy zcela vyloučit, ale důležité je, že např. tupě nevezme ten kus paměti, kam daný pointer ukazuje a nesnaží se ty bajty z paměti interpretovat jako jiný ty, než jaký to je (místo toho dojde k běhové výjimce).