Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?" s$ P' U3 m9 }: O3 Z3 q
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:
6 W4 b7 r) L; {' F: Y# c5 Z5 c( V+ b9 i) e- Доступ в пределах класса:
5 b+ u$ S0 y- _3 K6 g, b3 p; y- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
' d; [% i( a& s( o8 k& |
- Доступ в пределах пакета:/ u7 D0 u( b# Z# u0 T/ |( n- a
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.+ {$ T/ }; W' D9 [- l1 V# g) J$ t) R
- Доступ в наследуемых классах:
+ z4 G# q' q; K- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.( [: i a; Q, L
. t! x" H. v0 e8 L7 U
9 n! g5 D0 g* h- z. g$ U3 V$ `2 WРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
7 k1 E; {9 d0 p! Q/ E1 D Пример:5 }. L! A" j9 L% {/ D2 B0 X( A
- public class Animal {2 `8 Z$ \6 h* z2 A2 r T" [6 x
- protected String name;* a! W% M N% Y% ^4 J
- 1 E/ U! n5 H; W5 t# c( H! `+ {% k
- protected void eat() {
9 v5 S) j4 t) L" J+ r9 y! I - System.out.println("Animal is eating");
: q( F+ e# A8 H - }
# [: [# o p# R# ~ L9 J - }
+ v8 k' ]) G" }9 ]
( K/ n' q7 p1 x6 ]2 L; \3 o- public class Dog extends Animal {! v1 N0 t4 F3 J' B; W
- public void bark() {( o& m4 q- t$ U: I1 |
- System.out.println("Dog is barking");+ \ ?. |! `% O- V
- }- v4 {) S, a4 T9 `& t( |# \
- & L* P* ]5 i! m; N A0 X. A
- public void dogBehavior() {4 h+ G8 I; W% P8 {/ @) {5 f' q
- // Доступ к protected полям и методам родительского класса/ R J# \8 z' X
- name = "Buddy"; // доступ к полю name( N& c1 a- E! k" \5 m9 L7 j
- eat(); // вызов метода eat0 ^8 Z7 t4 e6 j; R0 o4 |/ _
- bark(); // вызов метода bark$ S) [: N0 U$ r
- }
! ]" [+ L2 p: o: T- @2 A2 A8 k1 Z - }+ d& S7 h9 {8 f1 _& u% \4 g2 l
Скопировать код В этом примере:4 i5 K; u; _; [
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
: N1 Y) @, J& n5 {' o% o% O Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.! S) ?$ o1 N5 [# X2 K b, N! O
Надеюсь, это объяснение помогло!" A C9 Z7 c8 |
- Z/ x0 `/ s% u# H5 @5 D" O
7 n& n& ^, B' g
( d, W9 e [: g* ~7 J |) G7 y* b7 Y6 m& t. i
! W( z6 L# Z* o! x4 x) Y9 I |