Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
" n; ?' l& T! h$ M0 S: vКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:2 u7 h7 @( i! O' U
- Доступ в пределах класса:$ p, n9 n1 s: u/ u
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.3 N5 L M: g U6 ~* e# T! h' l6 m- m; @
- Доступ в пределах пакета:- J0 u5 _( H$ q. J! w0 h f; q+ S
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.5 ~. y& |" A W. ]/ Y) M$ v
- Доступ в наследуемых классах:
' w4 Z* B/ S, X- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
6 Y# T3 D* [; A* U0 `! {' u
. J9 O. a9 `/ }( b8 J3 s
7 B4 `6 `& l, m: e
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
! O9 A4 t% E n; m2 Z Пример:) I* h1 y% [% {3 X4 I) Y- ]
- public class Animal {- n4 r6 C7 L/ t; y( G3 P
- protected String name;/ k1 L- ?* Q- D& G$ y9 e% b
- 1 P4 X/ }3 n% x
- protected void eat() {
% V/ K! Z2 U: a1 ?' f+ o2 E* M - System.out.println("Animal is eating");; Z) Z1 @; f" O
- }
G5 @4 _" | U; ^* p1 | - }8 ]' K8 Q' ^; X9 Q
- 7 o. u. B5 O1 c; c# n5 V, ~3 G: s% c
- public class Dog extends Animal {1 |# a! _8 `! }. W# a2 B
- public void bark() {
: J( N8 ~- A6 L* x8 y+ b% r - System.out.println("Dog is barking");- y/ I$ y6 Z6 F- e; i
- }' C2 |& m1 ^' g& w9 h4 ?+ ]/ W
1 i4 Y6 T, \0 F+ a0 p- public void dogBehavior() {( I' }: @5 A- V+ d; t
- // Доступ к protected полям и методам родительского класса
7 s* W. ]5 g4 v$ k# ` - name = "Buddy"; // доступ к полю name
; e6 O0 h+ g; i8 Y% Y6 T: `: z - eat(); // вызов метода eat2 Z& p9 r. O8 |2 F# |8 f7 g
- bark(); // вызов метода bark1 m: J" ^ n2 | ?6 E6 }
- }
" s9 n C8 w Y/ @. E: F - }
7 M0 h! [ u# {9 l
Скопировать код В этом примере:2 b* \5 F5 V7 P8 U% N/ s8 L% p
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
p: O6 E' p- v9 l, x Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.
+ {0 N9 S4 A+ l/ B, M9 T0 v2 w4 kНадеюсь, это объяснение помогло!: b" H& s- v6 V, ~# a; I$ n
8 n: Y; h4 G2 G) L l( @8 e
/ A% N' l& k; o/ {
2 t6 q0 [2 u: [: m, W. r( i" k1 G" a9 A5 B8 R
|