Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?1 V! S7 Y: N) w& A% h3 M
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:4 c! a" q- A' j$ ]9 M
- Доступ в пределах класса:
/ j( k0 P9 e. a- c3 Q& a3 g- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены./ j8 V- e% Q- ~
- Доступ в пределах пакета:, [% T/ A* i0 y. J; W7 D- U
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
1 a8 A8 r0 s: U1 A8 |; [+ v/ b4 V) w+ P
- Доступ в наследуемых классах:9 {( x1 o U; [ ^
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.5 N8 V4 d4 a! N9 W
4 ~1 R! ~) `; ~# C" C: W
, V4 f( q' L8 wРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
) y) s% c3 c' t Пример:1 K! q9 f- k* k, }, n" N% u) _) w
- public class Animal {
! b7 T1 Y8 B) e - protected String name;, d, g( w+ B! g' m
- 1 M" j' g. B0 k- f6 U
- protected void eat() {8 a1 z% {: ?, O9 f+ B) J- V$ `$ d
- System.out.println("Animal is eating");1 F) x5 N8 o: f, z: P* ?; p1 ]
- }
) v3 R- g( `- A2 F6 }7 W" S - }
" L+ q! @( P0 N1 w3 b1 f6 w; ?
6 d; Z! P6 f F) Y& ^. c2 k- public class Dog extends Animal {
0 z' e. o! q& a$ y3 n! K# I - public void bark() {
+ w: @6 _# Q' a5 m - System.out.println("Dog is barking");
$ r' p+ f/ u# J/ K - }
: I7 F0 W+ Y2 g y2 x) J3 a
8 q/ v3 v! A3 x. U. i2 R- public void dogBehavior() {
' }1 g5 h1 o$ C {0 I& A - // Доступ к protected полям и методам родительского класса, a: x: b; I$ p' Y9 _& L, q
- name = "Buddy"; // доступ к полю name- [8 n' L t: v" `& p# v4 ]+ b$ ^
- eat(); // вызов метода eat
7 ?2 [* ^0 ^) k* _ - bark(); // вызов метода bark, u. n/ E, S" N! [3 u
- }
2 q0 u( E8 M6 x5 k - } {! E: @% u; v( r6 c1 x$ @
Скопировать код В этом примере:
+ \" v7 b& {: Z, V( L9 Q- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
' Q1 e( E/ \( r8 S1 ? Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.7 v. }8 w- o F+ Y `
Надеюсь, это объяснение помогло!
. c2 m) x6 j. s$ k9 j$ c" c; J4 H' p. H4 q: j6 u) A& e; {
2 R. }3 `* A8 ]0 i3 ]4 g- H0 b
C! D K$ }9 _8 y3 w$ V5 E
+ L. r+ S8 Q4 p7 C! a& v ~4 q# } |