Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Что значит protected?
, r8 u$ Y- w( E+ F# gКогда переменная или метод класса объявлены с модификатором protected, это означает следующее:
& \7 Y' }/ x/ P2 T. c) Z9 L, l- Доступ в пределах класса:
8 j z: \ \9 S9 l; h- Поля или методы с модификатором protected доступны внутри того же класса, в котором они объявлены.
8 ]% i/ o% ~0 i! D1 {2 |
- Доступ в пределах пакета:
[ l+ r7 m0 t- F( w- Все классы, находящиеся в том же пакете (пакет — это каталог, в котором находятся файлы), могут обращаться к полям и методам с модификатором protected.. E6 f+ S2 }4 d, Z: w* }' {
- Доступ в наследуемых классах:
; s7 K, j4 ^) Y6 _( k9 ^4 m( O- Классы, которые наследуют данный класс (даже если они находятся в других пакетах), могут также обращаться к полям и методам, помеченным как protected.5 b# V4 E) N8 p* a
9 l0 }7 ~" R, {2 H( v+ }/ S) @
3 Q( R# g n7 uРазличие между public, protected, private, и default (package-private):- public: Доступен всем. Любой класс может использовать поля и методы, объявленные с модификатором public, независимо от того, в каком пакете они находятся.
- protected: Доступен классам в том же пакете и классам-наследникам (даже если наследники находятся в другом пакете).
- private: Доступен только внутри самого класса. Другие классы, даже наследники, не могут обращаться к полям и методам, объявленным как private.
- default (package-private) (когда модификатор не указан): Доступен только классам в том же пакете. Класс из другого пакета не сможет получить доступ к таким членам.
0 {# G# [% m* C0 |' f* Q9 V Пример:% N% s( I3 q& @: P1 m
- public class Animal {& _0 Y: p9 e; D4 k# Y8 H
- protected String name;
$ [/ c- G3 a ~6 F/ ^+ U. C
& S" `7 k1 I& r2 a- protected void eat() {
. I) i0 }* d t& D# Q - System.out.println("Animal is eating");
/ c0 Y7 E* w/ \) F8 [/ O8 b - } I" P4 c* Z" a6 P2 O
- } |% d: s. n/ ?- r( I
- 7 Q5 a% t) W! F1 }4 J [
- public class Dog extends Animal {) N( d( T6 T7 n1 c$ H" e; ~
- public void bark() {; t& M2 G& t# K, t: w' _
- System.out.println("Dog is barking");( w$ N$ ]9 w5 A
- }# }' @. A' U: T1 I/ O# f
! X. }2 r! y3 Z& {+ D4 n. O: x- public void dogBehavior() {6 c& O- \# O4 o# |) ?5 y
- // Доступ к protected полям и методам родительского класса" G0 z4 S, y/ q0 V z
- name = "Buddy"; // доступ к полю name. U# A; `* O8 r5 E( S9 h# }- z. B" }
- eat(); // вызов метода eat5 l. l" m# W6 X, e$ ^
- bark(); // вызов метода bark U7 ~: N0 _) E1 e3 H
- }& H" d0 l; j- O% l* q% {1 H
- }; G& l' [# C& ^! K7 M7 z* {5 O% `
Скопировать код В этом примере:9 y A$ g& M0 v4 l$ |
- Переменная name и метод eat в классе Animal объявлены как protected.
- Класс Dog, который наследуется от класса Animal, может свободно использовать name и eat благодаря тому, что они объявлены как protected.
- Если бы name и eat были объявлены как private, класс Dog не мог бы получить к ним доступ.
2 n- [3 X3 e4 A; {1 V5 U0 P; l8 n: g1 ^ Основное преимущество protected:Модификатор protected предоставляет возможность наследникам работать с полями и методами родительского класса, сохраняя при этом некоторую степень инкапсуляции. То есть, другие классы не могут получить доступ к этим полям и методам, если они не находятся в том же пакете или не являются наследниками.! ?: {2 P8 I' u2 N1 Q
Надеюсь, это объяснение помогло!: T) e$ H: p: `* x$ S; \" U' G3 l
. Z7 m. v8 k/ r2 d6 t
) u) c _: g) f$ }7 S
# o- ?! U# w7 z+ V o
/ ?7 f4 i' v) P, p! g3 z |