Metoda wirtualna (funkcja wirtualna) to metoda, która może zostać nadpisana w klasach dziedziczących. Metody wirtualne umożliwiają polimorfizm.

Właściwości C++ Są deklarowane przy użyciu słowa kluczowego virtual. Metoda wirtualna nie może być zadeklarowana jako statyczna (static). Jeśli metoda wirtualna została zaimplementowana w jakimkolwiek wyższym poziomie dziedziczenia (w szczególności w klasie bazowej całej struktury dziedziczenia), nie jest konieczne podawanie implementacji w klasie pochodnej. Słowo kluczowe virtual można pominąć w deklaracjach w klasach pochodnych. Słowo kluczowe virtual określa się tylko w deklaracji metody, nie określa się tego w definicji (chyba że deklaracja jest jednocześnie definicją, co ma miejsce gdy implementacja metody zostanie określona w ciele klasy). Jeśli w klasie jest zadeklarowana jakakolwiek metoda wirtualna, zaleca się aby destruktor w tej klasie również określić jako wirtualny.

Java W Javie domyślnie wszystkie metody są wirtualne.

C#

W C# domyślnie metody nie są wirtualne. Metody wirtualne muszą zostać zadeklarowane przy użyciu słowa kluczowego virtual.