доступность защищенного метода Java

В ниже кода Потребительский класс может получить доступ к защищенному методу Родительского класса. Как это возможно, так как нет никакого отношения между Родительским и Потребительским классом. Объясните

class Parent {
    public void method1(){
        System.out.println("PUBLIC METHOD");
    }
    private void method2(){
        System.out.println("PRIVATE METHOD");
    }
    protected void method3(){
        System.out.println("PROTECTED METHOD");
    }
}

public class Consumer {
    public static void main(String[] args){
        Parent parentObj = new Parent();
        parentObj.method1();
        //parentObj.method2();
        parentObj.method3();
    }
}

Спасибо

28
задан Gianni Costanzi 17 August 2012 в 21:15
поделиться

5 ответов

protected означает: тот же пакет или наследование. Поскольку ваши классы оба находятся в пакете по умолчанию (не рекомендуется в реальной жизни), protected разрешает доступ. Кстати: если вы пытались проверить управление доступом в java, вы забыли default access (default access = no modifier = package private).

private доступ с другой стороны означает: доступ ниоткуда, кроме данного конкретного класса (и нестатических внутренних классов, которые все равно являются членами класса-хозяина).

46
ответ дан 28 November 2019 в 03:01
поделиться

Вот соответствующие выдержки из спецификации языка Java:

JLS 6.6 Access Control

Язык программирования Java guage предоставляет механизмы для управления доступом , чтобы пользователи пакета или класса не зависели от ненужных деталей реализации этого пакета ] или класс . Если доступ разрешен, то объект, к которому осуществляется доступ, называется доступным .

JLS 6.6.1 Определение доступности

  • [...]
  • Член / конструктор ссылочного типа доступен, только если тип доступен, а член / конструктор объявлен для разрешения доступа:
    • public : доступ разрешен.
    • protected : доступ разрешен, только если выполняется одно из следующих условий :
      • Доступ к члену или конструктору осуществляется из пакета , содержащего класс, в котором объявлен член или конструктор protected .
      • Доступ правильный, как описано в JLS 6.6.2 Подробная информация о защищенном доступе .
        • К защищенному члену / конструктору объекта можно получить доступ извне пакета , в котором он объявлен только кодом, который отвечает за реализацию этого объекта.
    • private : доступ разрешен тогда и только тогда, когда он происходит в теле класса верхнего уровня, который включает объявление члена или конструктора.
    • В противном случае мы говорим, что существует доступ по умолчанию , который разрешен только тогда, когда доступ осуществляется из пакета , в котором объявлен тип.

Раздел, выделенный жирным шрифтом, является ответом на вопрос в этом сценарии: Родитель и Потребитель принадлежат одному и тому же пакету , таким образом, по крайней мере , защищенные члены Родителя доступны из Потребителя .

См. Также

7
ответ дан 28 November 2019 в 03:01
поделиться

Из-за защиты пакета.

http://mindprod.com/jgloss/packagescope.html

3
ответ дан 28 November 2019 в 03:01
поделиться

Во-первых, они находятся в одном пакете. Во-вторых, Consumer является внутренним классом Parent.

1
ответ дан 28 November 2019 в 03:01
поделиться

Адам, вы правы! Они находятся в одном пакете, поэтому класс consumer может получить доступ к защищенному методу родительского класса. Consumer не является внутренним классом родительского класса.

1
ответ дан 28 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: