Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?$ Z+ `9 N$ l5 x, S% `$ u
Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:
4 H9 y* l5 O* ]3 O# F$ o- Доступ в пределах класса:
, r- _* |8 J& v& U" _. Y- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.. V# `& \# M/ ^. j
- Доступ в пределах пакета:. v: _4 ?5 _( _! O" [2 e6 K1 z& E
- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.2 [* B5 V0 _, F4 y
- Доступ в наследуемых классах:
: E2 q/ v: i! m5 |7 w+ v- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
8 f( L1 j! u! r4 V3 Q6 i4 I- M# g
0 D7 A8 Z5 D6 F8 a+ Z
( `- }0 M; i$ j5 y
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.. i1 [6 S: l. {/ w8 C! H( |
Пример:
% i4 d5 L) h5 B9 k8 W- O. A$ J- public class Animal {
, C. P* |9 b) e4 o( L! P - protected String name;+ j- L" d' ?9 {% J0 |
( ~) I" h) M+ w0 J- protected void eat() {
% @; ^2 v: j' [9 ^* P - System.out.println("Animal is eating");
2 x( n% W' ^+ V - }
$ Q( w) J3 d4 Z2 _ - }$ Q1 B% q! \ s7 ]
- ; ]5 O, O: G% ~+ _/ }9 c |# R
- public class Dog extends Animal {
% g2 Q# @- P( l1 x - public void bark() {
* D7 h3 ?% _, A6 i - System.out.println("Dog is barking");
) F* v1 g4 X p - }
' l6 v0 W2 f$ U+ P! B - ( B) K5 w8 ` }: x# l5 l- ^% Q" z/ g
- public void dogBehavior() {7 m) U5 f6 N: j+ o/ V/ B
- // Доступ к protected полям и методам родительского класса4 d" ^3 L% H7 \$ V! D) B! k
- name = "Buddy"; // доступ к полю name% d3 d7 I: B- Z6 `
- eat(); // вызов метода eat( a0 @2 y' D, Y! z% \' M$ \
- bark(); // вызов метода bark8 F& n; }8 g" @7 g
- }
! O/ ^% c3 ^0 X5 u( ~% N* i - }
8 Q$ K+ ]0 Y$ d6 m
Скопировать код В этом примере:2 H8 C6 V9 A& F3 a, z
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
U( k; H+ X4 |2 L' `+ l z Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.
+ t! j( x3 ^: R; W ~$ H3 y0 bНадеюсь, это объяснение помогло!$ S' h- z7 S, s7 G. R
8 R" H3 ^4 ^5 n+ W1 J4 I1 ^* H) s
* J0 n8 x$ R! l& N
. i& c: y+ V F+ @
, E/ H3 K! p o% w6 `( {
|