Los variables y métodos de una clase pueden ser declarados como public, private, protected y default. Public indica que se puede acceder a este miembro desde cualquier método, los miembros private solo pueden ser accesibles desde dentro de la clase, un miembro protected es accesible únicamente desde la misma clase o desde sus clases descendientes y un miembro default es igual al que un miembro público desde el mismo paquete, mientras que en otro actúa como private.
Los siguientes cuadros tratan de aclarar este problema:
Como vemos hay cuatro modificadores de acceso a los miembros dato y a los métodos: private, protected, public y default (por defecto, o en ausencia de cualquier modificador). La herencia complica aún más el problema de acceso, ya que las clases dentro del mismo paquete tienen diferentes accesos que las clases de distinto paquete.
Desde el punto de vista práctico, cabe destacar que no se heredan los miembros privados, ni aquellos miembros (dato o función) cuyo nombre sea el mismo en la clase base y en la clase derivada.