Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
: a- Z$ K7 E; I q% n1 m pКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:
; E/ v. ?9 E# @1 Y8 {0 g- Доступ в пределах класса:, P4 J, g$ s' b6 H L6 W
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.6 v4 L9 O# s6 t+ P3 o$ y ]/ f
- Доступ в пределах пакета:
$ D4 {; I3 V7 s- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
; X, A6 E6 @& f6 N" r
- Доступ в наследуемых классах:
3 a8 T6 W0 y9 S& D3 C; u8 {2 g& |- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
" }( {3 o0 \5 i$ @! F, ~
; e+ a% b M$ z. x% ]4 b
7 w% F5 s a( Q( TРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
" z' R2 @4 o0 }0 i Пример:
- J# E, |/ m6 U& w+ D- public class Animal {- R" K/ N: P2 \- D; w8 O1 o
- protected String name;$ r# U) N& |: q5 o" B
- 3 E" f# H2 Y8 i0 d5 L
- protected void eat() {
& p+ ~6 l: [9 |4 c& U w - System.out.println("Animal is eating");
7 O# ?' W5 x. J+ ]; M8 F& j9 ? - }4 ~8 P! _3 h L, G1 m; K
- }; W0 `1 L- _+ C( p+ t
% b- d$ m' R" U9 q7 H# z: [- public class Dog extends Animal {/ i2 ?) m) k8 \5 f' |/ M! |, l
- public void bark() {
+ u8 r+ |% Q6 _( F0 o; [5 o - System.out.println("Dog is barking");
' o; }% J1 H: k0 J. V - }
' h/ O* S" S) N0 Q6 R! j - / z6 [: C5 P. m& J0 }) e5 M% R
- public void dogBehavior() {
; x" f# ~0 h: J' Y' J - // Доступ к protected полям и методам родительского класса, V+ f1 D- y' {
- name = "Buddy"; // доступ к полю name3 M3 Z9 e+ O8 |! Y
- eat(); // вызов метода eat
# ~# L& g3 ?. H# C9 t: H! x - bark(); // вызов метода bark
: W% [% Y: E& H8 K5 ~. W - }/ l0 Q: `+ y" @* _' g: l
- } h. S* Z7 d6 |
Скопировать код В этом примере:1 p: O( }' d& a8 ?
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.' i3 n: t7 ^$ E0 t4 s) o& [
Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.! l$ C* g' N! v
Надеюсь, это объяснение помогло!
8 Y$ H& H% M- K: }) j! R& s, B9 C2 r& P) N3 P
; T" B, t' \) _( P( e2 Q
3 g& N" v' Q4 u% T0 f9 q
. v. J( _; r5 k+ j- J/ E |