Klasa abstrakcyjna stanowi wtedy wzorzec do dalszego rozszerzenia, który sam w sobie nie może być pełnoprawnym, poprawnym obiektem.

Klasy abstrakcyjne najczęściej posiadają przynajmniej jedną metodę abstrakcyjną. Jest to rodzaj metody, dla którego zdefiniowana jest wyłącznie lista argumentów, nazwa oraz zwracane wartości, natomiast nie jest ona zaimplementowana. Implementacją podanego interfejsu muszą zająć się klasy potomne.

Niektóre języki takie, jak Java czy C# obsługują ponadto szczególny rodzaj klas abstrakcyjnych zwany interfejsem. Interfejs nie może definiować żadnych atrybutów, a wszystkie jego metody są abstrakcyjne. Ponadto najczęściej nie dotyczą ich ograniczenia pojedynczego dziedziczenia.

Klasy finalne Klasa finalna ma sens jedynie w przypadku dziedziczenia – nazywamy tak klasę, której nie można rozszerzyć.

Klasy lokalne i wewnętrzne Niektóre języki programowania umożliwiają tworzenie klas w innych przestrzeniach niż globalna. Istnieje kilka typów takich klas.

Klasa wewnętrzna lub zagnieżdżona to klasa, która jest zdefiniowana wewnątrz innej klasy. Klasy wewnętrzne posiadają dostęp do metod statycznych klasy głównej, lecz nie muszą być instancjonowane wraz z nią. Zależnie od języka, mogą, ale nie muszą być dostępne spoza klasy głównej.