Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
5 L9 D+ I6 }0 i9 X4 E" k! _) }Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:. V! J" }* k U( E: S* a r) I0 R
- Доступ в пределах класса:. ^* G" w2 Y& ^; S% H( i
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.0 E: z+ a' ]7 w
- Доступ в пределах пакета:
2 b: _1 q/ i6 e0 _- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.6 w9 J6 I! n7 _9 f# \
- Доступ в наследуемых классах:! x; g+ @. I0 ~+ p/ y% {( J! e
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.0 q2 p! z3 ?+ O# p
: a# o$ B( I& A
5 x8 ]& i6 L( N( X9 |& y4 U+ b/ \Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.! }' M6 J. }% i1 J. a: U
Пример:/ i- r, z6 U0 d! d( t9 a2 E
- public class Animal {% Z: w! b! K ^% c6 I, D9 r
- protected String name;( b4 T# W! p6 N; _/ N# C
E* G3 q, M. P! \- protected void eat() {
$ O: ?' k, ]( z. G) s- b5 e - System.out.println("Animal is eating");% N* W4 D8 O" d5 m8 e5 u: T N
- }
4 |) }8 ^6 b, t' B2 F - }
3 P) p* n/ W7 t, A v9 `' s& l( Y
9 v Z/ P7 y+ W( l( _- public class Dog extends Animal {4 s& _) Q. t6 N1 } P# g2 w
- public void bark() {
( b" t- q* p, R( o& J: [" p4 X7 v - System.out.println("Dog is barking");
7 B) _; n) Q) k' l7 j* h - }
5 ]5 s0 i! z9 o; D& z. l
+ h' x: G' `, P( U7 j- public void dogBehavior() {
/ b) h7 |& d0 q& m# r - // Доступ к protected полям и методам родительского класса; o+ e- }& A0 ~2 j
- name = "Buddy"; // доступ к полю name
% v9 k v( C/ L3 U4 i" E - eat(); // вызов метода eat
" [- u$ z' b. A. N+ q$ U - bark(); // вызов метода bark" H# V( {6 D% m
- }7 ?! c3 V, }. O" l/ D ?2 X0 P
- }
l1 b+ V/ A% B! b0 ^
Скопировать код В этом примере:) c, c( V/ Y+ c+ K- ^/ O
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
$ @2 J. z: ] H/ u Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками., |4 H! a1 \# v6 J
Надеюсь, это объяснение помогло!
/ n( r9 t5 A: d# p$ n- E, l. @/ j, j9 t K" K6 G
3 ?, |* |: R3 j/ o
5 A+ E! i9 e7 t2 S, g
7 E" [9 @- H9 x' e$ N+ G4 ~ |