Modyfikatory dostępu

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.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *