Klasa bazowa, zwana także nadklasą, to obiekt komputerowy, który działa jako podstawa dla jednej lub więcej klas pochodnych. Każdy język komputerowy, który jest zdolny do dziedziczenia, może tworzyć klasę bazową. W zależności od ich dokładnego typu, klasy bazowe mogą, ale nie muszą, być zdolne do inicjalizacji — przypisywania wartości początkowej do obiektu — samodzielnie, ale zawsze zapewniają pewien rodzaj wspólnej funkcjonalności każdej klasie, która po nich dziedziczy. Nigdy nie ma ograniczenia liczby klas pochodnych lub podklas, które mogą mieć klasy bazowe, ale może istnieć ograniczenie, w zależności od języka komputerowego, liczby klas bazowych, jakie może mieć klasa pochodna. Języki, które zezwalają klasie pochodnej na posiadanie tylko jednej bazy, mają wymuszać pojedyncze dziedziczenie, podczas gdy te, które pozwalają klasie pochodnej na posiadanie wielu klas bazowych, używają wielokrotnego dziedziczenia.
Konkretne klasy bazowe można zainicjować samodzielnie; oznacza to, że można utworzyć obiekt typu klasy bazowej. Jeśli klasa Example jest bazą dla klasy pochodnej Example2, można utworzyć obiekt typu Example2 i obiekt typu Example. Obiekt typu Example można utworzyć tylko przez jawne wywołanie tego typu obiektu; tworzenie obiektu typu Example2 nie tworzy obiektu drugorzędnego typu Example. W każdym przypadku tworzony typ obiektu buduje tylko swoją instancję.
Natomiast abstrakcyjne klasy bazowe nie mogą być inicjowane samodzielnie, co oznacza, że obiekt klasy bazowej nie może zostać utworzony samodzielnie. Jeśli klasa Example3 jest abstrakcyjną bazą dla klasy pochodnej Example4, można utworzyć tylko obiekt typu Example4. Mimo że typ Example4 zawiera dane z typu Example3, próba utworzenia obiektu wyłącznie typu Example3 spowoduje błąd. Ta funkcja może być czasami przydatna, szczególnie jeśli klasa Przykład3 zawiera prywatne dane, które powinny być ściśle regulowane.
W zależności od języka, w którym się pojawia, klasa bazowa może mieć nieco inne zachowania i wyraźnie różne nazwy. W Javie® klasy bazowe są zawsze określane tą nazwą, podczas gdy w C++, w zależności od ich struktury, można je nazwać klasami wirtualnymi. Różnice w nazwie i funkcjonalności, choć znaczące pod względem używanych języków komputerowych, nie oznaczają większych różnic w zasadzie stojącej za klasami. Klasa bazowa jest zawsze używana do hermetyzacji wspólnych funkcji i danych dla jej klas pochodnych, niezależnie od języka.