Pobierając aktywny obiekt, możemy wywołać tę metodę bez zastanawiania się czy dany obiekt jest przyciskiem czy polem tekstowym.

Decyzja o tym, która wersja zachowania zostanie wywołana w konkretnym miejscu, zależy od języka programowania i sposobu zdefiniowania metod. Rozpatrzmy następującą sytuację:

class A { method foo();

class B extends A { method foo();

A obiektBazowy = new A(); B obiektPochodny = new B(); obiektBazowy.foo(); // 1

obiektBazowy = obiektPochodny; obiektBazowy.foo(); // 2

Mamy klasę bazową A oraz dziedziczącą z niej klasę B. Klasa bazowa definiuje metodę foo(), która jest nadpisywana przez klasę pochodną. Przypadek pierwszy (1) nie budzi żadnych wątpliwości: mamy utworzony obiekt klasy A, dlatego wywołujemy wersję metody foo() zdefiniowaną w tej klasie. W przypadku drugim pod zmienną obiektBazowy podstawiony jest obiekt klasy pochodnej. Jednak wtedy w linijce oznaczonej przez 2 możemy:

wywołać wersję metody foo() z klasy A, mimo iż zmienna wskazuje na obiekt klasy pochodnej posiadającej zmodyfikowaną wersję, wywołać wersję metody foo() z klasy pochodnej B, mimo iż zmienna obiektBazowy jest typu A.