![]()
W poprzednich lekcjach poznaliście koncepcję klas, metod i pól, więc teraz nasuwa się pytanie: kto ma do tego dostęp? Właśnie tutaj pojawiają się modyfikatory dostępu – mechanizm, który decyduje, które elementy klasy są widoczne, a które pozostają ukryte.
Jeśli próbowaliście użyć metody, a Java odmówiła wykonania, bardzo możliwe, że przyczyną był właśnie modyfikator dostępu.
W tej lekcji dowiecie się, jakie poziomy dostępu oferuje Java i dlaczego warto je stosować.
Wprowadzenie
Modyfikatory dostępu określają widoczność klas, metod, pól oraz konstruktorów. Innymi słowami: wskazują, kto może korzystać z danego elementu, a kto nie powinien nawet wiedzieć o jego istnieniu. Dobrze dobrane modyfikatory chronią logikę aplikacji przed przypadkowym użyciem, ułatwiają rozwój i refaktoryzację kodu oraz ograniczają liczbę błędów.
Java udostępnia cztery poziomy dostępu: public, protected, brak modyfikatora (tzw. default lub package-private) oraz private.
Public – dostęp bez ograniczeń
Element oznaczony jako public pozwala korzystać z niego w każdym miejscu w aplikacji, niezależnie od pakietu.
Przykład:
public class Kalkulator {
public int dodaj(int a, int b) {
return a + b;
}
}
Metoda dodaj działa dla każdej innej klasy. W ten sposób klasa świadomie udostępnia element światu zewnętrznemu.
Stosując public, komunikujecie jasno: element ten należy do interfejsu klasy i możecie z niego korzystać poza jej wnętrzem.
Private – pełna enkapsulacja
Z drugiej strony private pozwala ukryć elementy wewnątrz klasy. Elementy oznaczone tym modyfikatorem nie są widoczne dla innych klas.
Przykład:
public class Użytkownicy {
private String haslo;
public boolean poprawneHaslo(String haslo) {
return this.haslo.equals(haslo);
}
}
Pole haslo i metoda poprawneHaslo są całkowicie ukryte przed światem zewnętrznym. Klasa chroni swoje wnętrze i nie pozwala, aby inne fragmenty kodu ingerowały w jej stan.
Dzięki private możecie ukrywać szczegóły implementacji i zmniejszać zależności między klasami, co ułatwia późniejsze modyfikacje.
Brak modyfikatora – dostęp w obrębie pakietu
Jeśli nie zostanie użyty żaden modyfikator, Java nada elementowi domyślny poziom dostępu, zwany package-private.
Przykład:
class RaportGenerator {
void generuj() {
System.out.println("Generowanie raportu");
}
}
W tym przypadku klasa i metoda działają tylko dla innych klas w tym samym pakiecie. Dzięki temu można logicznie grupować powiązane elementy bez udostępniania ich na zewnątrz.
Dostęp pakietowy okazuje się szczególnie przydatny przy porządkowaniu większych fragmentów aplikacji.
Protected – dziedziczenie i pakiet
Modyfikator protected umożliwia korzystanie z elementu w tym samym pakiecie oraz w klasach dziedziczących, nawet jeśli znajdują się w innym pakiecie.
Przykład:
public class Konto {
protected double saldo;
}
public class KontoPremium extends Konto {
public void pokazSaldo() {
System.out.println(saldo);
}
}
Pole saldo nie działa dla wszystkich, ale klasa potomna może z niego korzystać. To częste rozwiązanie w hierarchiach klas, gdzie część danych powinna pozostać dostępna tylko dla dziedziczących klas.
Używając protected, zyskuje się większą elastyczność, jednak warto robić to rozważnie, aby utrzymać kod przejrzysty i jasno określić, za co odpowiada każda klasa.
Podsumowanie
Modyfikatory dostępu w Javie pomagają utrzymać porządek w kodzie. public pozwala korzystać z elementów na zewnątrz, private chroni wnętrze klasy, dostęp domyślny porządkuje współpracę w pakietach, a protected wspiera dziedziczenie.
Jeśli dobrze zrozumiecie te mechanizmy, kod stanie się bardziej przejrzysty, przewidywalny i łatwiejszy w utrzymaniu.
W kolejnej lekcji omówimy enkapsulację i hermetyzację oraz dobre praktyki projektowe.
O autorze
Tester oprogramowania z pasją do jakości i technologii. Łączy doświadczenie w testach manualnych i automatycznych, koncentrując się przede wszystkim na aplikacjach webowych oraz usługach SOAP i REST. Testowanie to dla niego nie tylko szukanie błędów, ale przede wszystkim kwestionowanie przyjętych założeń i usprawnianie tego, co nie działa – również w samym procesie testowym. Lubi zmieniać, angażować się i aktywnie budować proces testowy, tak by miał sens, a nie tylko formę. Prywatnie fan rocka, biwakowania, podróży.

