Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
/ @7 \1 g/ S$ _/ ~$ w8 bКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:
3 A$ w: z- H9 n" [& E+ K- Доступ в пределах класса:4 B v% b: T0 w& S3 u
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
- r) @3 _ G1 X8 z
- Доступ в пределах пакета:
/ D" T" m' s d6 B- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
2 e. {6 `" u# R
- Доступ в наследуемых классах:5 f0 `1 D0 W y7 m& z: \
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
# q& ~8 ^: C8 S1 N
& P# f5 |3 k/ @
. `2 `8 d1 [+ @2 L* DРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
6 G4 A. s; W% a. j/ p1 s! j Пример:2 b' Y3 d* d1 ?6 b
- public class Animal {0 r; ~* e/ v, `/ R5 S
- protected String name;" J T$ m4 t% A. J
" {' g" p; r, _) I9 U! [6 B% m- protected void eat() {
' j& V& L/ B- q/ I' }2 S+ } - System.out.println("Animal is eating");& K; {) ~9 f" d& C8 ?( y' D
- }
; `8 D! i( Y* C9 A/ ] - }6 @# o/ C/ N0 {1 W
- N* Z! y- x- ?% T$ G: f4 Y4 m
- public class Dog extends Animal {
4 {$ `7 M) ]' @# H9 U4 x, ?, V - public void bark() {
' p, d- [% L- s. H* U9 Z% v, q# ~ - System.out.println("Dog is barking");
# G: s& P: a! i3 E5 I( a - }
5 u0 D! L% j% f: { - ) s4 u' r% @$ D
- public void dogBehavior() {
" f! R+ i, |+ A% X1 n5 k- ? - // Доступ к protected полям и методам родительского класса
- C" L5 o( ]5 T( n e& u- L - name = "Buddy"; // доступ к полю name
4 o l4 m" J% s7 P: Z4 x+ {: Z( O - eat(); // вызов метода eat
. _2 q# h* o8 P - bark(); // вызов метода bark
; a+ z: @* B: n. m5 d# {5 C, @ - }) R- E! x5 p1 A& A- S
- }& }: s6 i4 a. `/ C
Скопировать код В этом примере:
1 {7 O8 `" {' D' f& o8 f1 g- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
) q5 F+ z& F1 a( C Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.
k0 F. j$ Q. ]9 g5 H+ @+ r; xНадеюсь, это объяснение помогло!
* x y( }; N6 Z5 {
1 m" Q3 V/ i: {/ d' y
" E/ h* r j* m/ q0 {" U5 |+ }/ h3 @
) j+ U" R) ^+ \* X" H1 q |