Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?9 _9 y# S7 E7 e) R$ I/ x+ r7 u
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:3 @- E) d& o, D: o$ ], z; Q/ _
- Доступ в пределах класса:
$ ]; C9 ^6 T1 ]5 K z- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
" j, [1 w2 Y% D% B+ O2 {
- Доступ в пределах пакета:
6 {) H( f6 n/ u8 p- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
$ G! ^+ y) n, L y7 ]7 O; I" h
- Доступ в наследуемых классах:
9 C8 ?9 `' ^% [* k5 @" _) P; R- j- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.. G2 s* P6 l2 V* H
% b' _' S5 Q7 @4 K4 t {* N% F" ~3 @
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.5 K7 r/ c1 {% b2 a- e( K4 ]
Пример:; y9 W6 I, N) {. O# w" k
- public class Animal {* X3 c5 j1 P' K8 b" l; L
- protected String name;
0 P- Q/ p" D1 R9 | - ' d- }' ?: K& K8 }$ E/ V
- protected void eat() {
, `- j3 b/ Z/ x4 i - System.out.println("Animal is eating");
8 n2 a$ E2 C2 ^' v/ O, E - }7 ]) B, F4 l7 T S4 b% I
- }: y( u4 g: ?' ^6 j2 I$ \7 o/ e
2 u, x7 r+ }: c, [, u% j6 c2 z- public class Dog extends Animal {7 ^. a: u3 M8 W7 K8 ]/ J
- public void bark() {
, a4 K* ^ j; C. H7 D - System.out.println("Dog is barking");
! q& v9 }6 b0 V9 ` - }
+ x% o9 ]' i( P8 N: v/ _
4 v) B- v9 U$ A. Z6 s- H' y- Y- public void dogBehavior() {# r$ k. M4 C) U6 v8 T$ [5 R# U" P
- // Доступ к protected полям и методам родительского класса6 z; j4 [" F9 f" Z( i
- name = "Buddy"; // доступ к полю name$ S' ]+ v) }. D5 B: }* o
- eat(); // вызов метода eat7 u" r9 o% W' M5 L' r) F
- bark(); // вызов метода bark6 Q: N1 W; q/ ]. i* ]5 M
- }2 [: R5 X# \! P7 ~8 C" M
- }
* R3 ~7 } c. e2 e* G
Скопировать код В этом примере:
6 B, O6 w2 {+ N# V I' Y, `- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
2 D ^- [5 j* f L9 ~! @2 }( E Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.. w! D. K7 z3 c6 L- p6 C
Надеюсь, это объяснение помогло!
; ^- B: i/ R: C) u# g5 K- l6 S) E$ p$ D* U( ]& u; m2 n1 ~
/ l2 ?- X* z( _# F; q# r/ ~, ]0 J
6 R% I0 t1 ?6 D6 s+ n |