Модификаторы доступа и скрытие полей Java
Это продолжение вопроса: "Модификаторы доступа Java и переопределение". Первый обычно имеет дело с методами Java, однако. Почему гибкость с полями Java? Мы можем сузить или расширить видимость с их уважением в унаследованном классе, тогда как не можем использовать метод "переопределенный" или "скрытый".
2 ответа
почему гибкость с полями Java
Вы не можете сделать поле в другом классе приватным, расширив его. Когда вы создаете новое поле в подклассе, вы просто скрываете поле суперкласса.
class Base {
protected int x;
}
class Ext extends Base {
private int x; // not the same as Base.x
}
Вы никогда не отменяете поля для начала - вы всегда их скрываете. Поля не являются полиморфными... другими словами, если вы напишите:
Superclass x = new Subclass();
System.out.println(x.field);
и оба Superclass
а также Subclass
объявить поле с именем field
в любом случае, он всегда будет использовать суперкласс, потому что это все, что может видеть компилятор.
Лично я все равно стараюсь держать свои переменные в секрете...