Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
# D# Z9 g9 ^/ Q6 Z6 S- @ v" CКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:* z1 m# p6 o- c
- Доступ в пределах класса:" v: H8 H2 s& Z2 v6 P
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.7 I9 D' j z7 a
- Доступ в пределах пакета:* T# E8 q. F) O, o" E; c3 t, o" Z
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
" J% g. }( r( K& m
- Доступ в наследуемых классах:0 F( I4 K4 L2 N- H5 r. v
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
% [2 p1 {& _5 B) b3 M2 C/ q0 {. j6 Q
& [ Q3 z+ J1 A
8 j5 N- u& [: |9 ^ oРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.( F- H/ X0 T+ q# w2 m4 f
Пример:8 A* d8 c' F# c) O# U
- public class Animal {1 X4 P5 x* v! n" i
- protected String name;
! c$ _3 _1 ^) t1 ~+ x
/ S8 o7 Q* E$ {- protected void eat() {7 n/ o: j0 I8 }+ B% n
- System.out.println("Animal is eating");$ z- a+ R* F: |0 s) y B
- }
% Z4 e6 F$ H7 J) {% A0 r! i% t5 a - }
! D, ^& o" V c4 q3 H0 p* H: C+ X
7 c& l! L% {' d( W- public class Dog extends Animal {- B3 D4 y0 }1 Q& d
- public void bark() {% X7 ]: L4 ~2 A$ C; W* Q1 ^
- System.out.println("Dog is barking");& x0 b* z3 X" ^
- }
# U0 D" W5 d5 y3 @ U - - @% O9 q& n8 |6 ?
- public void dogBehavior() {; b9 {0 Q s g+ J
- // Доступ к protected полям и методам родительского класса) v$ X/ L; A2 s7 _0 \ `. y
- name = "Buddy"; // доступ к полю name0 V1 C$ S2 m4 s1 s o; w% U4 z
- eat(); // вызов метода eat
% p | B$ k. y$ f$ M' y - bark(); // вызов метода bark( T' y( H9 `! u6 h3 x( R' t
- }0 B9 A6 t3 g( m( e3 S0 ~% Q
- }
% h, m9 E% s7 ?7 T% n& q" E( B
Скопировать код В этом примере:" Q, H1 Q. H2 f- r+ d3 ^8 A4 X
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
5 K6 U1 V* y& g- ^ Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.! i, g9 Q6 u( T
Надеюсь, это объяснение помогло!' J4 B+ _7 |8 z7 @
5 g& V3 z: [. w# \7 i; J$ g# L' V. }8 }' f
5 Y3 h+ I3 _% D1 v/ K. a/ S3 s" G- y" \! d$ X
|