В объектно-ориентированном программировании (ООП) уровни доступа определяют видимость и доступность членов класса (переменных, методов) из других частей программы. Одним из уровней доступа, доступных во многих языках программирования, является «защищенный» уровень доступа. В этой статье мы углубимся в концепцию защищенного класса и рассмотрим различные методы на примерах кода, которые демонстрируют, как можно получить доступ к защищенному классу в других классах.
Понимание уровня защищенного доступа:
Защищенный уровень доступа предоставляет доступ членам класса внутри того же класса, его подклассов и других классов, находящихся в том же пакете или модуле. Этот уровень обеспечивает баланс между инкапсуляцией и наследованием, позволяя производным классам получать доступ к защищенным членам и изменять их, сохраняя при этом сокрытие информации и целостность данных.
Метод 1: Наследование:
Один из основных способов доступа к защищенному классу — наследование. Когда класс наследует защищенный класс, он получает доступ к защищенным членам родительского класса.
class Parent {
protected int protectedField = 10;
}
class Child extends Parent {
void accessProtectedField() {
System.out.println(protectedField);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.accessProtectedField(); // Output: 10
}
}
В приведенном выше примере класс Child наследует класс Parent, а защищенное поле protectedFieldдоступно внутри класса Child.
Метод 2: доступ к тому же пакету/модулю:
В некоторых языках программирования доступ к защищенному классу могут получить другие классы, находящиеся в том же пакете или модуле.
package com.example;
public class Parent {
protected int protectedField = 10;
}
public class OtherClass {
void accessProtectedField() {
Parent parent = new Parent();
System.out.println(parent.protectedField); // Output: 10
}
}
Здесь OtherClass находится в том же пакете, что и родительский класс, что позволяет ему получить доступ к защищенному полю protectedField.
Метод 3: внутренние классы:
Если у класса есть внутренний класс, внутренний класс может получить доступ к защищенным членам внешнего класса.
class Outer {
protected int protectedField = 10;
class Inner {
void accessProtectedField() {
System.out.println(protectedField); // Output: 10
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.accessProtectedField();
}
}
В этом примере класс Inner может получить доступ к защищенному полю protectedFieldкласса Outer.
Понимание различных методов доступа к защищенному классу имеет решающее значение для эффективного использования уровня защищенного доступа в объектно-ориентированном программировании. Используя наследование, доступ внутри одного и того же пакета/модуля или используя внутренние классы, мы можем использовать преимущества доступа к защищенным членам класса, сохраняя при этом инкапсуляцию и целостность данных.