У меня есть код, очень похожий на следующий.
package my.pkg;
public abstract class X {
private CapableField field;
public abstract void doSomething();
public X(CapableField fieldValue) {
this.field = fieldValue;
}
}
И
package my.pkg.sub;
public class Y extends my.pkg.X {
public void doSomething() {
this.field.doSomething();
}
}
Почему это даже допустимый код на Java? Я думал, что «private» означает, что поле не будет напрямую доступно в подклассах, и что это был довольно простой принцип наследования классов. Создание X
бетона вместо абстрактного ничего не меняет.
Что мне делать, если я специально хочу, чтобы поле или функция-член были доступны только внутри класса, в котором оно определено, а не в каком-то случайном подклассе определяющего класса?