Вы можете получить доступ к i из класса, потому что частные члены могут быть доступны только членам класса.В этом случае это выглядит странно, потому что p - это другой объект, нежели объект, который обращается к переменной, но он все тот же класс, и ограничение на уровне класса, а не на уровне объекта.
class Program
{
private int i;
public void method1()
{
Program p = new Program();
p.i = 5; // OK when accessed within the class
}
}
Выне может получить доступ к i из другого класса (если это не внутренний класс, но это другая история).Что вполне соответствует ожиданиям.
class AnotherClass
{
void method2()
{
Program p = new Program();
p.i = 5; //error because private variables cannot be accessed with an object which is created out side the class
}
}
Я понимаю, что вы хотите сделать.Ограничение на уровне класса выглядит противоречащим интуитивно.И, возможно, это не так.Но переменные-члены по-прежнему доступны только внутри класса, поэтому у вас все еще есть полный контроль, чтобы гарантировать инкапсуляцию ваших рядовых.