Jest to zmienna referencyjna do interfejsu. Takiej zmiennej można przypisać egzemplarz dowolnej klasy implementującej zadeklarowany interfejs. Wywołanie metody dla takiej zmiennej spowoduje wywołanie odpowiedniej wersji metody należącej do właściwego egzemplarza klasy, bo zauważ, że wiele klas może implementować ten sam interfejs. Odbywa się to w sposób dynamiczny (analogia do polimorfizmu w C++), czyli w trakcie działania programu, a nie podczas kompilacji, wiąże się to jednak ze zmniejszeniem wydajności.
Prosty przykład: interfejs mógłby zawierać zachowania (metody) pracownika, a klasy go implementujące np. szef, menadżer projektu, developer mogłyby mieć przepis jak te zachowania (metody) wykonać w właściwy dla siebie sposób. Tej samej zmiennej referencyjnej (pracownika) w trakcie działania programu moglibyśmy na początku przypisać egzemplarz klasy developera, a później szefa. Metoda wywołana na rzecz jednego i drugiego będzie wykonana w inny sposób mimo tego, że odnosi się do tej samej zmiennej referencyjnej.