Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?; O, n0 _7 [# v# b# C
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:
$ f+ L" O: c5 ^3 d3 b3 T- Доступ в пределах класса:1 a1 S$ q: D) z9 K7 i
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.$ R! P" K+ J6 A9 f# f; N+ l
- Доступ в пределах пакета:) W8 i3 k$ Y0 T' r
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
# I' H% k, b$ a- o# w
- Доступ в наследуемых классах:
B: X6 `9 c, t7 j- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
. C; R j! L' G* O: ~
9 ^1 f" m; O6 ?3 U) ^; H7 T8 C4 _8 D! Z# [: P
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.4 g* y+ m. J) J6 ?3 B3 |
Пример:
8 d& B' t( }' t; K& _% ]- public class Animal {
6 ]( p& Q5 T% z1 i - protected String name;
0 j. y# H: }5 f4 H: ]* `3 S
G( s5 g6 b2 a0 m- j! h( K+ u- protected void eat() { p$ ~) D) Y7 ^8 Q. N) E
- System.out.println("Animal is eating");
6 z3 P& V4 P# |8 d - }& A* k2 c, m% S! R2 M* @
- }
$ B, E0 H$ R! H3 ] - 1 l" D" Q! w. Z9 Z& x1 l
- public class Dog extends Animal {/ c$ o: H+ A2 x* M
- public void bark() {0 [9 Y: ?( A3 ^0 }0 e) y
- System.out.println("Dog is barking");
6 B& M' o% Z2 y0 B c8 `# B) X _ - }
) U2 i6 t$ H7 k. m: \, @) W7 N* W - ! C, f9 k& {2 ?- r. }$ D6 l
- public void dogBehavior() {
5 E! L* I1 K/ D9 K g: o - // Доступ к protected полям и методам родительского класса1 g4 z! b6 `+ {, _4 p- p$ |; ^9 w
- name = "Buddy"; // доступ к полю name( h, @6 v! {# C9 V' g
- eat(); // вызов метода eat
6 j1 p+ g4 p2 F7 i8 F8 { - bark(); // вызов метода bark+ s! q8 d- b" Q$ H4 M
- }
: }' b8 \. @9 A9 e# V - }
9 f/ i% s; U" A. W4 K
Скопировать код В этом примере:
4 B2 b$ @8 V, g" L4 {; q- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.3 v: G: Z; O8 ^/ W3 x
Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.: ~# S7 C9 _' P. v! t5 i/ M$ |
Надеюсь, это объяснение помогло!
! O; p$ t" G4 @' g* n3 s1 m( |" W! y* B2 I6 U
* ~/ y. K9 T& p. G+ x+ k8 ?& S7 v7 b( p1 p1 z
9 I6 y6 w' c. Y5 ^- {; i! [
|