Modyfikator `protected` pozwala na dostęp do pól i metod klasy w ramach tej samej klasy oraz w klasach dziedziczących. Jest to pośredni poziom dostępu między `private` i `public`. Pola `protected` są ukryte przed innymi klasami spoza hierarchii dziedziczenia, ale pozostają dostępne w klasach pochodnych. Dzięki temu dziedziczenie staje się bardziej elastyczne, umożliwiając klasom potomnym korzystanie z chronionych elementów klasy bazowej. Przykład w C++: `class Pojazd { protected: int predkosc; }`. Klasy dziedziczące po `Pojazd` mogą używać `predkosc`, ale obiekty nie mają bezpośredniego dostępu do tego pola.
Pola `public` są dostępne z każdego miejsca w programie, co narusza zasadę ukrywania implementacji. `Private` ogranicza dostęp tylko do metod tej samej klasy, co oznacza, że klasy pochodne nie mogą korzystać z prywatnych pól i metod klasy bazowej. `Static` oznacza, że pole lub metoda należy do klasy, a nie do jej instancji, co nie jest związane z kontrolą dostępu. Tylko `protected` zapewnia dostęp do pól i metod w klasach dziedziczących, zachowując jednocześnie pewien poziom ochrony przed nieautoryzowanym dostępem z zewnątrz.