Nie zabrakło też tak istotnej własności języków zorientowanych obiektowo, jak polimorfizm. Każda klasa może dziedziczyć z innych klas (jednej, lub kilku). W Itcl praktycznie każda metoda klasy jest wirtualna.
Przykładowa klasa Itcl Oto przykład klasy implementującej stos:
itcl::class Stack { private { variable stack "" }
public { # Dodaje element 'arg' na stos method push {arg}
# Zdejmuje ostatni element ze stosu i zwraca go method pop {}
# Czysci stos method clear {}
# Zwraca liczbe elementow na stosie method count {}
itcl::body Stack::push {arg} { lappend stack $arg }
itcl::body Stack::pop {} { if {[count] == 0} {return} set last [lindex $stack end] set stack [lrange $stack 0 end-1] return $last }
itcl::body Stack::clear {} { set stack "" }
itcl::body Stack::count {} { return [llength $stack] } Można teraz tej klasy używać w następujący sposób: Stack st st push "word 1" st push "word 2" st push "word 3" puts [st pop] puts [st pop] puts [st pop] Spowoduje to wyświetlenie kolejno: word 3 word 2 word 1