Урок 9

Модификатор protected


Доступ по умолчанию раскрывает область видимости только для классов определенных в том же пакете.

Protected модификатор раскрывает область видимости для классов определенных в том же пакете или для классов-наследников.

Пример 1. Доступ по умолчанию vs protected

package oop.p1;

public class Parent {
    public void publicAccessMethod() {
    }

    void defaultAccessMethod() {
    }

    protected void protectedAccessMethod() {
    }
}

Определяем класс наследник в другом пакете:

package oop.p2;

import oop.p1.Parent;

public class Child extends Parent {
    public void someMethod() {
        publicAccessMethod();
        //defaultAccessMethod();
        protectedAccessMethod();
    }
}

Из класса Child нет доступа доступа к default членам класса Parent, но есть доступ к protected членам класса Parent.

Рассмотрим следующий класс - AccessClass, находящийся в пакете отличном от класса Parent. Он не является наследником Parent, поэтому доступ из него разрешен только к public методам:

package oop.p2;

import oop.p1.Parent;

public class AccessClass {
    public static void main(String[] args) {
        Parent parent = new Parent();
        parent.publicAccessMethod();
        //  parent.defaultAccessMethod();
        // parent.protectedAccessMethod();
    }
}

Перенесем класс AccessClass в пакет, в котором находится класс Parent, и мы получим доступ не только к public членам класса, но и к protected и default:

package oop.p1;

public class AccessClass {
    public static void main(String[] args) {
        Parent parent = new Parent();
        parent.publicAccessMethod();
        parent.defaultAccessMethod();
        parent.protectedAccessMethod();
    }
}


0 comments
Leave your comment: