Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
. |9 |, e/ L7 d9 U. i3 l9 jКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:# l, N. {$ k% `0 ?# ^( Y5 j
- Доступ в пределах класса:
3 v2 p/ x8 p7 @8 |; T/ R0 J0 Q& j0 x- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
$ b3 e/ y. d- M7 p- T. R
- Доступ в пределах пакета:
- y9 d O$ h A8 y8 [; Z5 N+ m- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
: z T2 g* W( P6 O
- Доступ в наследуемых классах:' I( h/ t8 Z0 B. ^/ R; c/ U5 y6 R+ i
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
5 L2 V0 j+ {# D# g6 m7 K7 s
" H2 ^% |4 c; s
3 G6 E5 ^9 F# s( w) h
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.# `+ I1 ?- _5 `
Пример:
/ M) p# k t3 D3 t7 `" N- public class Animal {, }! v- a' [) p" q6 m0 r
- protected String name;. \. T$ m7 o. B
- ' n5 K. v" M4 K' N
- protected void eat() {2 j+ i$ u+ T! t- ?% v. K
- System.out.println("Animal is eating");7 D0 u3 r: g% G2 Z' @: Q
- }
5 z! X/ S9 I% L4 B+ S - }* F) o3 p" ?3 r
- ( Z5 X( `7 F0 }0 K' g+ l
- public class Dog extends Animal {) H/ k" O8 q$ k9 G& i L- X
- public void bark() { }4 F, R9 Y' l
- System.out.println("Dog is barking");) B/ [- [( k8 x& s& N% t1 ~
- }
" ^. {( C% z U) r7 E& i3 W5 q% D - 2 ~9 ]' r0 K: A1 M4 b* N; N3 a- J
- public void dogBehavior() { E" L, V$ t& L3 a
- // Доступ к protected полям и методам родительского класса7 Z2 `& \+ t5 F% S$ }
- name = "Buddy"; // доступ к полю name$ n8 L/ p9 Y3 P# R
- eat(); // вызов метода eat$ n' F$ K9 v) s5 i( e" N2 Y2 V
- bark(); // вызов метода bark* n& ?+ ?4 _6 i6 Y/ V
- }
" t, z+ ^' c9 C2 z- @, i - }: I/ I2 c+ r6 F) y' T( s
Скопировать код В этом примере:2 N4 H/ U! x1 T+ [
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
0 Q9 Y8 W8 G. B9 b( P: V; v Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.
( }$ \% b" X, S# r! o9 d8 g# zНадеюсь, это объяснение помогло!
4 w0 r7 A. O4 c
7 S+ b0 F9 o1 m; r$ t0 G+ y+ g6 Y
- \9 o! X n$ Y/ L4 @" l) I5 @% z
|