@VDVDL

Почему я могу обратиться к приватным полям класса в методе main?

Есть простой код:
public class IncapsulationSetterandGetter {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.name = "Данил";
        person1.age = 22;
        person1.speak();
    }
      static class Person{
         private String name;
         private int age;
        
        void setNameAndAge(String username, int userage){
            name = username;
            age = userage;
        }
        
        int calculateYearsToRetirement(){
            int years = 65-age;
            return years;
        }
        
        void speak(){
                System.out.println("меня зовут " + name + ", мне " + age +" лет" );
        }
        void sayHello(){
            System.out.println("Привет");
        }
}
}

Вопрос в следующем, почему я могу спокойно менять значения полей класса Person в методе main, если они приватные? В vs code делаю все тоже самое и не могу менять поля.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Потому что язык это разрешает:

Otherwise, the member or constructor is declared private, and access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.

https://docs.oracle.com/javase/specs/jls/se8/html/...

Вложенный класс - это член внешнего класса, а классы всегда имеют полный доступ ко всем своим членам. Модификаторы доступа распространяются только на доступ извне.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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