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 |
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.