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