- klasy/obiekty mogą współdzielić ze sobą funkcjonalność.
- pola i metody wykorzystywane tylko przez daną klasę/obiekt są ograniczane 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.