W programowaniu zorientowanym obiektowo, klasa abstrakcyjna zapewnia klasę bazową, która może być użyta do zapewnienia innym klasom częściowej implementacji i interfejsu. Same w sobie są niekompletne i używane w sytuacjach dziedziczenia w wielu językach programowania, takich jak Java, C++ i C#. Ich użycie jako klasy bazowej oznacza, że często określa się je mianem abstrakcyjnej klasy bazowej (ABC).
Abstrakcja danych, będąca integralną częścią programowania obiektowego, usuwa niepotrzebne szczegóły obiektu. Zasadniczo sprowadza obiekt do jego głównych cech identyfikacyjnych. Te podstawowe cechy zapewniają plan, który można wykorzystać do stworzenia innych obiektów o tych samych właściwościach, różniących się jedynie szczegółami.
Ten plan jest zdefiniowany jako klasa. Klasy są używane do enkapsulacji kodu, co ułatwia programiście, ponieważ może on odwoływać się do określonych wspólnych procedur zamiast pisać je w kółko. Programiści tworzą obiekty potomne z klas, a te obiekty dziedziczą funkcje i metody w klasie nadrzędnej.
Celem klasy abstrakcyjnej jest bycie strukturą, na której budowane są inne klasy. Obiekty nie mogą być tworzone bezpośrednio z klasy abstrakcyjnej, tylko z podklas należących do klasy abstrakcyjnej. Aby obiekt dziedziczył po klasie abstrakcyjnej, musi zostać utworzona podklasa. Obiekty utworzonej podklasy klasy abstrakcyjnej dziedziczą właściwości tej klasy abstrakcyjnej.
Każda klasa modeluje koncepcję, a klasy abstrakcyjne mają tendencję do modelowania bardziej abstrakcyjnych koncepcji przy użyciu metod abstrakcyjnych. Metody abstrakcyjne to podprogramy wewnątrz klasy abstrakcyjnej, które nie zawierają implementacji. Te podprogramy są używane jako symbole zastępcze, które mają być nadpisane przez podklasę lub obiekt zaprojektowany na podstawie klasy zawierającej samą metodę abstrakcyjną.
Istnieją różne metody tworzenia klasy abstrakcyjnej. Na przykład w C++ klasę abstrakcyjną tworzy się, tworząc klasę z co najmniej jedną metodą abstrakcyjną lub czystą funkcją wirtualną. Java używa słowa kluczowego „abstrakcyjny” do oznaczenia klasy abstrakcyjnej. Nie są one jednak zdefiniowane w językach programowania, które nie wspierają idei dziedziczenia.
Dziedziczenie to proces tworzenia nowych obiektów z klas, w których nowe obiekty mogą korzystać z funkcji i metod zdefiniowanych w ich klasach nadrzędnych bez konieczności ponownego przedstawiania programu. Dlatego przydatna jest klasa abstrakcyjna. Klasy potomne i obiekty potomne tych podklas dziedziczą właściwości z nadrzędnej klasy abstrakcyjnej. Klasy abstrakcyjne są uważane za nadklasy i znajdują się na szczycie hierarchii struktury klas, więc nie mają sensu język, który nie obsługuje dziedziczenia.