klasy/obiekty mogą współdzielić ze sobą funkcjonalność
pola i metody wykorzystywane tylko przez daną klasę/obiekt są ograniczone zasięgiem private lub protected
klasy/obiekty mogą mieć zdefiniowane metody wirtualne, które są implementowane w pochodnych klasach/obiektach
typy pól w klasach/obiektach mogą być dynamicznie zmieniane w zależności od danych im przypisywanych