Модификаторы доступа и скрытие полей 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в любом случае, он всегда будет использовать суперкласс, потому что это все, что может видеть компилятор.

Лично я все равно стараюсь держать свои переменные в секрете...

Другие вопросы по тегам