W dzisiejszym wpisie zamieściłam opis modyfikatorów dostępne dla klas, metod, pól oraz konstruktorów. Jest to ważny temat z punktu wiedzenia bezpieczeństwa naszej aplikacji. Najogólniej modyfikatory możemy podzielić na:
- public,
- private,
- protected,
- default (private-package)
Modyfikator public – oznacza że dana klasa jest dostępna dla wszystkich klas (bez ograniczeń). Wszystkie klasy, pola i metody, które są public przeznaczone są do używania przez wszystkich. Stąd gettery, settery i inne metody są publiczne co pozwala wpływać na stan obiektu, lub wykonywać przydatne operacje w tych miejscach aplikacji w których jest to potrzebne. W przypadku klas zewnętrznych można użyć tylko modyfikatorów publicznych lub domyślnych.
Publiczne powinny być elementy końcowe, a private, protected, package-private (brak modyfikatora), elementy bardziej wewnętrzne, skomplikowane, czy też takie których nieodpowiedzialne użycie mogłoby nieodpowiednio zmodyfikować założenia co do działania aplikacji.
Modyfikator private – oznacza, że kod jest dostępny tylko w zadeklarowanej klasie (w przypadku konstruktorów ma to takie znaczenie, że obiektu danej klasy nie stworzymy spoza tej klasy). Taka metoda jest niewidoczna z poziomu innej klasy, nawet zawartej w tym samym pakiecie. Modyfikator private zabrania dostępu każdemu. Powoduje również, że dany element nie podlega dziedziczeniu.
!!! Wyjątek: możemy stworzyć prywatną klasę wewnętrzną.
public class Movie{ private class Year{ // klasa potrzebna tylko klasie Movie i dostępna tylko dla klasy Movie } }
Modyfikator protected (dostęp chroniony) oznacza że klasa lub kod w klasie jest dostępny dla klas w tym samym pakiecie + klasy dziedziczące. Wyjątek – klasa wewnętrzna może być protected. W temacie dziedziczenia natomiast wszystkie pola i metody z tym modyfikatorem są dziedziczone zarówno przez klasy z tego samego pakietu jak i z innego.
Modyfikator domyślny(default)/(pakietowy) package-private – oznacza, że klasa jest dostępna tylko dla klas znajdujących się w tym samym pakiecie. Dostępu package-private stosujemy gdy do metod, pól, lub klas powinny mieć swobodny dostęp wszystkie klasy z naszego pakietu. Stosujemy go też, kiedy niektóre elementy chcemy ukryć przed twórcami innych pakietów. Żeby klasa była dostępna tylko wewnątrz swojego pakietu wystarczy nam modyfikator domyślny/pakietowy/brak modyfikatora. Klasa ani pola czy metody klasy z tym modyfikatorem nie są dziedziczone przez inne klasy z innych pakietów.