Создание класса с помощью защищенного конструктора

1
public class MyTest {
    public static void main(String str[]){
        Info i=new Info();
        i.value=20;
        System.out.println("Integer value is :"+i.value);
    }
}
class Info {
    int value;
    protected Info(){
    System.out.println("Class with protected constructor");
    }
}

→ Я что-то пропустил в отношении защищенного модификатора, но не мог понять. → До сих пор я читал, что класс с защищенным конструктором может быть создан только его субклассами, и это тоже в одном пакете или в другом пакете. Тогда как получилось, что это дает мне этот результат: класс с защищенным конструктором. Целое число: 20

Теги:
access-modifiers
protected

3 ответа

2
Лучший ответ

Protected члены доступны из Class, Same package и того Same package и в Subclass. Он не имеет доступа к World (кроме упомянутого выше)

См. Таблицу ниже

В следующей таблице показан доступ к членам, разрешенным каждым модификатором.

Access Levels
Modifier      Class    Package     Subclass         World
public          Y         Y            Y              Y
protected       Y         Y            Y              N
no modifier     Y         Y            N              N
private         Y         N            N              N
  • 0
    Чем вы, я упустил момент, что оба находятся в одном пакете
  • 0
    Добро пожаловать!
4

Потому что оба класса, MyTest и Info находятся в одном пакете.

Классы в одном пакете могут без проблем получить доступ к защищенным членам

Если член или конструктор объявлен защищенным, доступ разрешен только тогда, когда выполняется одно из следующих условий:

  • Доступ к члену или конструктору происходит изнутри пакета, содержащего класс, в котором защищенный член или конструктор
    объявлен.

Проверьте JLS 6.6.2

0

Что вам поможет в долгосрочной перспективе - знать, что доступ к НИЧЕГО может быть доступен и управляться только подклассами. Это включает в себя методы, переменные и т.д. Классы, находящиеся в том же пакете, что и класс с защищенным конструктором, все еще "осведомлены" о переменных, расположенных внутри конструктора. Поэтому вы получаете свой вывод "Класс с защищенным конструктором Целое значение: 20", потому что два класса находятся в одном пакете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню