INF.04 · pytanie 522
Modyfikator dostępu znajdujący się przed definicją metody Dodaj() w klasie Kalkulator sprawia, że: protected void Dodaj() {}
- Ajest ona możliwa do wykorzystania w programie głównym i można ją wywołać na instancji klasy Kalkulator
- Bnie jest ona osiągalna w klasach, które dziedziczą po klasie Kalkulator
- Cnie jest ona dostępna z poziomu klas, które są zaprzyjaźnione z klasą Kalkulator
- Djest ona dostępna zarówno w samej klasie, jak i w klasach dziedziczących po klasie KalkulatorPoprawna
Wyjaśnienie
Modyfikator protected w językach takich jak C# czy Java oznacza, że metoda jest dostępna zarówno w tej samej klasie, jak i w każdej klasie, która po niej dziedziczy — niezależnie od tego, w którym miejscu projektu ta klasa pochodna się znajduje. To jest bardzo praktyczne, bo pozwala pisać tzw. szkieletowe klasy bazowe, udostępniając pewne funkcjonalności tylko klasom potomnym, a jednocześnie ukrywając je przed kodem zewnętrznym. Takie podejście umożliwia budowanie bezpiecznych i elastycznych struktur dziedziczenia, gdzie konkretne działania mogą być modyfikowane lub rozszerzane tylko tam, gdzie trzeba. Bardzo często spotyka się protected w dużych projektach, gdzie kluczowe funkcje mają być używane wyłącznie w rodzinie klas, a nie dostępne dla całego świata. Moim zdaniem, to świetny sposób na wymuszanie architektury i porządku w kodzie, no bo wiadomo, jak każdy miałby dostęp do wszystkiego, to zaraz byłby bałagan. Przykład praktyczny: pisząc klasę bazową Kalkulator, możesz mieć protected Dodaj(), a publicznie udostępnić tylko ogólną metodę Oblicz(). Dzięki temu masz większą kontrolę, co i jak jest wykorzystywane. Branżowo przyjęło się, że protected to taki złoty środek pomiędzy public a private, gwarantując odpowiednią enkapsulację i możliwość dziedziczenia. Warto to stosować świadomie, żeby potem nie mieć niespodzianek w dużych projektach.