Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
* f# x4 }. |% B5 q4 M) Y" UКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:
8 y7 X" ~9 Z! z2 a; w- Доступ в пределах класса:* \" S- d# j# ^# m8 D
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
) r/ m0 J* Q$ ?/ A1 u* a& n4 n: b7 L
- Доступ в пределах пакета:. S+ S+ s+ J% M! I4 ~2 O
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
0 l5 V# H' v0 S2 x
- Доступ в наследуемых классах:
5 C( ^ {. E( _" |- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
. l8 `8 ~& c, P, U
! x+ P% a, {# L% c9 c, y+ H, x& O7 s% o+ Z
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.: U; O5 v# ?) i; M
Пример:0 D/ T4 G2 a4 b5 a% m9 y
- public class Animal {
2 d/ }7 Y- X7 q! ]& ?% x - protected String name;
5 {$ |* t- y6 j8 ?7 g- [) E
3 d5 H6 ]( m- S. L4 U# ]0 J: h- protected void eat() {
8 G0 M; C3 k4 ?% A! i: H7 q) d g4 M+ X - System.out.println("Animal is eating");+ U3 m$ l9 P. J. `! k9 `
- }
7 |& V3 b# Q! s: D: ~, O& b - }2 @) j+ c, h) l+ j- v& m, N
- 5 n& U! k. u7 K; z5 w" w
- public class Dog extends Animal {
! M: T& M' Q, S% H: M9 ^3 i - public void bark() {" |" v6 p9 d) k9 ]+ @
- System.out.println("Dog is barking");
0 l9 J5 F8 g$ E6 p; v, c+ f8 m0 t - }+ q. r! ^ b. E7 X# u( Q
2 O+ ^% |6 A( N# O/ E/ i- public void dogBehavior() {
Q% B0 ~! k) L - // Доступ к protected полям и методам родительского класса" Z9 K$ @: s2 Y/ u. o, N* u- i
- name = "Buddy"; // доступ к полю name
* ?+ p* B5 I5 K H3 L8 ? - eat(); // вызов метода eat
f2 q$ a& G7 O) q0 Y+ F% E - bark(); // вызов метода bark& u! P. l+ u% i* d5 o
- }
% K( W/ r( z! p7 @: }/ f4 q - }
, B5 R0 X- A) j
Скопировать код В этом примере:$ G+ z& _& r# j$ }3 @# E
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.% D9 E; f( ^5 N5 b: z: O0 H j
Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.: F6 p) s, D5 j' `( }& \
Надеюсь, это объяснение помогло!4 i* Y: s$ e4 T
! g% W! j7 ?( d+ u4 ~+ C
$ {! s ~. H9 z S/ Z
1 _9 d$ [" O* v) W! {& C* \( r% _1 p4 D% F' z; c% r q1 U
|