modyfikatory dostępu w Javie

Oto tabelka, kto ma w Javie dostęp do jakich atrybutów (a tu jest wersja odt).

    private default protected public
ta sama klasa metoda pewnego obiektu próbuje dostać się do atrybutów tego obiektu ma dostęp ma dostęp ma dostęp ma dostęp
metoda pewnego obiektu próbuje dostać się do atrybutów innego obiektu tej klasy
statyczna metoda pewnej klasy próbuje dostać się do atrybutów obiektu tej klasy
statyczna metoda pewnej klasy próbuje dostać się do statycznych atrybutów tej klasy
klasa potomna w tym samym pakiecie obiekt klasy potomnej próbuje dostać się do swoich atrybutów zdefiniowanych w klasie rodzicielskiej w tym samym pakiecie nie ma dostępu ma dostęp ma dostęp ma dostęp
obiekt klasy potomnej próbuje dostać się do atrybutów innego obiektu klasy rodzicielskiej w tym samym pakiecie
statyczna metoda klasy potomnej próbuje dostać się do statycznych atrybutów klasy rodzicielskiej w tym samym pakiecie
inna klasa, ten sam pakiet obiekt pewnej klasy próbuje dostać się do atrybutów innego obiektu innej klasy z tego samego pakietu nie ma dostępu ma dostęp ma dostęp ma dostęp
statyczna metoda pewnej klasy próbuje dostać się do statycznych atrybutów innej klasy z tego samego pakietu
klasa potomna w innym pakiecie obiekt klasy potomnej próbuje dostać się do swoich atrybutów zdefiniowanych w klasie rodzicielskiej w innym pakiecie nie ma dostępu nie ma dostępu ma dostęp ma dostęp
statyczna metoda klasy potomnej próbuje dostać się do statycznych atrybutów klasy rodzicielskiej w innym pakiecie
obiekt klasy potomnej próbuje dostać się do atrybutów innego obiektu klasy rodzicielskiej w innym pakiecie nie ma dostępu
inna klasa, inny pakiet obiekt próbuje dostać się do atrybutów innego obiektu innej klasy z innego pakietu nie ma dostępu nie ma dostępu nie ma dostępu ma dostęp
statyczna metoda pewnej klasy próbuje dostać się do statycznych atrybutów innej klasy z innego pakietu

podsumowanie

Jeśli modyfikatory dostępu ułożymy w ciąg (prywatny, domyślny, chroniony, publiczny), to każdy kolejny daje dostęp tym samym klasom co poprzedni i do tego jeszcze jakimś innym klasom.

Więc każdy modyfikator dostępu dodaje uprawniania jakimś klasom:

w przypadku dwu modyfikatorów – prywatnego i chronionego – można zadać pytanie: ale chodzi o metody tego obiektu czy o metody innego obiektu? W przypadku modyfikatora prywatny pytanie brzmi: czy mówimy o sytuacji, kiedy do atrybutu próbuje dostać się metoda tej klasy wywołana na tym obiekcie (którego atrybuty chcemy zmieniać) czy też wywołana na jakimś innym obiekcie? W przypadku modyfikatora chroniony pytanie brzmi: czy mówimy o sytuacji, kiedy do atrybutu zdefiniowanego w klasie rodzicielskiej próbuje dostać się metoda klasy potomnej wywołana na tym obiekcie, którego atrybuty chcemy zmieniać czy też wywołana na jakimś innym obiekcie? Analogicznego pytania nie da się sensownie postawić w przypadku modyfikatorów domyślny i publiczny, bo dwa obiekty różnych klas (niepołączonych dziedziczeniem) nie mogą być w Javie tym samym obiektem. Odpowiedź na to pytanie jest inna dla modyfikatora prywatny a inna dla modyfikatora chroniony. Modyfikator prywatny daje prawo dostępu do atrybutu i temu obiektowi,i innym obiektom. A modyfikator chroniony daje dostęp tylko temu obiektowi, a innym nie.

A metody statyczne mają dostęp do atrybutów statycznych zawsze taki sam, jaki miałyby metody niestatyczne do atrybutów tego obiektu, na którym zostały wywołane.