Не могу понять почему компилятор не ругается на someclass.field:
public class Someclass {
private int field;
public int method(Someclass someclass) {
return this.field - someclass.field;
}
}
Поле field же private и, как я понимаю, при обращении через переменную someclass должно быть недоступно.
Компилятор Вас не обманывает.
Предполагается что private поле будет использоваться только внутри класса, в котором оно объявлено.
Ваш пример никак не нарушает это правило, вы обращаетесь хоть и к полю объекта переданного по ссылке, но все-таки это экземпляр этого же класса, в котором и происходит обращение к полю. Так что все легально.
Ключевое слово - Private - оно ограничивает видимость данных и методов пределами одного класса, т.к. у Вас все в пределах одного класса, ругаться и не будет, но если Вы попробуете вызвать переменную таким образов в другом классе, данный метод не сработает
Сборка персонального компьютера от Artline: умный выбор для современных пользователей