Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
; I; s- a. L& ]8 ]; ~Когда переменная или метод класса объявлены с модификатором protected, это означает следующее:( `; L* ]& T/ |# @9 \0 g5 k6 N
- Доступ в пределах класса:
& T: m+ n1 `- S' @8 [6 Y) }/ Q" L- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.' P' Z6 X) {& a. d6 L% g Z" q; _
- Доступ в пределах пакета:
6 V1 x5 T- |; D6 Z/ @. ^- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected." t$ d8 B, p, X
- Доступ в наследуемых классах:
8 u% i- G5 m0 u3 Y* a, o- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.
* D8 O" D$ B, e7 \- D( m
5 [ P8 ^) }) E) u/ N; P9 j+ k- {$ w9 P d
Различие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.8 J$ _7 E; }- ?8 F6 J$ l3 r8 p) b, H
Пример:
; K8 `% c! [3 D" ^* K8 J- public class Animal {& Q) q5 l S& s" i# U
- protected String name;
6 c( i/ z) l& E9 y9 c( {, x4 @
" I/ t( n; x" ^. D- protected void eat() {
- D& I, v+ K* D1 X+ V. i9 |# J% ?( u7 Y - System.out.println("Animal is eating");8 K, u" T8 ?7 C$ o( ^% K/ S2 M s9 Q7 G
- }
" U' f( R& [- `2 d - }% G* l- l) Y$ b% {: Q2 A% B! Z. L
- " Y! [' ^3 W% y X* x5 V- B/ H
- public class Dog extends Animal {- I: u) B) j# s. [# L2 @
- public void bark() {0 W5 P6 P/ F/ Z
- System.out.println("Dog is barking");
! Y3 @: f% p# M4 c" W$ z - }
3 a0 J2 n$ E2 K! ^ - " B4 S) c8 A, g' e; _" l9 k0 @' A4 e
- public void dogBehavior() {
; ?) Z) O% B4 X8 v - // Доступ к protected полям и методам родительского класса( `3 e- {+ y' O5 {9 m1 k
- name = "Buddy"; // доступ к полю name6 G* }- h6 B# F% m
- eat(); // вызов метода eat: T0 \% n3 b0 W D) D$ h$ r) `
- bark(); // вызов метода bark7 V* j, [4 ?. l) S; X4 v
- }; V% _" r3 F. `8 H2 K+ }: D( ?' j
- }4 U* [0 C( j" ^& z7 x
Скопировать код В этом примере: {% x% F( } q1 U# m7 N9 j
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
) d. a9 C6 ~ d7 T. X Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.9 i7 m7 p2 p( c! E& S8 o# O
Надеюсь, это объяснение помогло!3 w7 }5 A$ y' l8 U( ^5 q$ E( i, a
1 p5 y q4 P; v: v
7 v0 @! i2 ]# Y; N
; T5 ~* T' i" ]2 ]- c
) X9 n9 Q& F, v: q3 |( K/ G! ? |