Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться  
 
x
 
Что значит protected? 
, Z0 N9 N* A9 c. \! dКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:$ D, e6 F8 E' W! e 
- Доступ в пределах класса:$ `3 o8 e! ^; h+ O5 B
 
- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.' w) H# B+ R- U  z/ a. M% s6 G
 
 
  - Доступ в пределах пакета:
 
2 {% U: ?/ j$ {  i! \' Y$ o- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.
 
& O. h2 u$ u6 H0 k 
  - Доступ в наследуемых классах:8 b+ O! Z% o% ^! c8 R
 
- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.+ n" c. {0 f$ T8 v+ `
 
 
  
  
' K4 L" b, P( \ 
6 g/ t- ~% n9 [% ~- S; GРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
 - protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
 - private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
 - default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.! k' y0 y; P8 b
 
  Пример:  I. L4 l$ S- M% k$ e2 E 
- public class Animal {  B1 P9 y% A, h; S5 u5 O3 E
 
 -     protected String name;
 
. [/ s: p% ~" N+ k - # T- q+ q! Y( n
 
 -     protected void eat() {
 
1 P# C+ r0 C$ u+ \" X$ C2 M7 A -         System.out.println("Animal is eating");/ H8 q; j3 I9 s9 ?
 
 -     }
 
) f. u6 s# s* Q# F5 O - }
 
- R. j9 b* _5 I7 I2 h  y- o+ r - + r! ^( [0 d* J9 o% M& W' m
 
 - public class Dog extends Animal {/ G4 [4 F7 ?. h9 J2 v
 
 -     public void bark() {- W0 f& ?0 j" x# g9 L4 v8 g& }. l
 
 -         System.out.println("Dog is barking");
 
( E3 M1 [3 x; b7 }: J7 d% e -     }6 E4 _% F( x$ n( w) _! Y( v
 
  
# \  {4 _2 F+ B7 ?& r# Y4 ]-     public void dogBehavior() {
 
0 L1 Z) Q1 [4 l* k& U. s -         // Доступ к protected полям и методам родительского класса9 c( Q# Y* E3 g( i; D1 N8 G5 N
 
 -         name = "Buddy";      // доступ к полю name
 
/ ^& p2 P! y6 J5 O -         eat();               // вызов метода eat1 a; r, S$ U% k: ^( l# |, y
 
 -         bark();              // вызов метода bark
 
* h2 m( {3 }, ]4 h -     }
 
0 E- {1 M0 j. e7 e - }: h* Q( v! W0 I+ `
 
 
  Скопировать код В этом примере:0 o' @2 \4 d& r& V. b 
- Переменная name и метод eat в классе Animal объявлены как protected.
 - Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
 - Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
 
! t9 j3 O0 R/ Y1 E# v2 r  Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.$ {# Q' j, E: a. J6 v* p 
Надеюсь, это объяснение помогло! 
4 Y' U: [6 M1 a7 G" h* } 
8 M9 x  S+ o2 `! a6 C: r+ O7 L- f9 C" R: Z% x4 U; {+ { 
 
2 g2 r: \; \9 ~, W9 o8 y1 ]8 o6 u; i# A0 C  o4 V 
 |