Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?& O" U4 b4 ~1 E4 I% ?4 |/ a7 [
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:/ m6 Z# E2 Z7 _! j8 c5 A
- Доступ в пределах класса:) A. R- c$ p( j0 j
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
$ j: r" M b6 F. M/ U; U
- Доступ в пределах пакета:
/ w9 `' c3 Q% F( A( W9 v- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.- ~, }+ m9 h. q4 u& W
- Доступ в наследуемых классах:9 l7 q' S$ x% E' G
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
, c- Q( M6 W. y
1 \" T- T# s6 z6 P) o
% S) n1 J i. k" s, OРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
/ P h# k% I0 _0 |% V7 U Пример:
6 K: e6 w" F, g( ]- public class Animal {
" j' F3 O$ B# V9 \ - protected String name;
- F& ~# T' o6 u7 ^! Y( O" F1 v - ' f6 F/ C# ?- C p$ w* n7 w
- protected void eat() {; P+ G& z% Z4 L4 e. v& n- r5 K4 C
- System.out.println("Animal is eating");
" y' }, w( b" h0 i0 k. Y/ G - }
6 s# y$ O5 b+ s# h2 X- p. a1 g# C - }
/ x+ j" p- B$ ~
2 P" k' @/ k$ M( g6 v/ @- public class Dog extends Animal {5 c& g+ ~2 @$ A; @
- public void bark() {
" S% E, d+ D7 v8 x- a, O) o2 G+ O - System.out.println("Dog is barking");: w- v0 ]2 V* y: b8 f$ f
- }% N! X# F. E9 l2 i+ \
! O; M8 ~, T# k3 g) U2 k3 ^- public void dogBehavior() {* T. |8 A+ V3 d! p2 l! ^* l
- // Доступ к protected полям и методам родительского класса) r ?) D+ N$ v: y, V
- name = "Buddy"; // доступ к полю name
/ F6 @ V7 t$ i l; g$ _- v - eat(); // вызов метода eat$ g# `! a+ R T0 Y6 _
- bark(); // вызов метода bark6 u$ F# h2 ^/ z* M" G. z7 C' r
- }' p: Q! ]# i& N6 P# t6 O
- }
7 I5 A# A" E8 g W: p
Скопировать код В этом примере:& t$ \2 ^+ U) J4 ^
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.2 R( D& w9 _/ I8 l; S! |! Y. L. \
Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.
( _9 G* D! y3 [- J/ N; Z: z3 uНадеюсь, это объяснение помогло!
/ G- g1 [" T& O1 H2 B3 |0 u. d2 T6 A! a& x) x
, U* u8 E7 j8 a4 j' i5 L0 _
4 x9 K) i k" F6 R# F1 K B; S- x' u: V: n& H
|