Модификаторы доступа и скрытие полей Java - PullRequest
1 голос
/ 29 июля 2011

Это продолжение вопроса: "java access modifiers and overriding" .Первый обычно имеет дело с методами Java, однако.Почему гибкость с полями Java?Мы можем сузить или расширить видимость с их уважением в унаследованном классе, тогда как не можем использовать метод «переопределенный» или «скрытый».

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

почему гибкость с полями Java

Вы не можете сделать поле в другом классе закрытым, расширив его. Когда вы создаете новое поле в подклассе, вы просто скрываете поле суперкласса.

class Base {
    protected int x;
}

class Ext extends Base {
    private int x; // not the same as Base.x
}
3 голосов
/ 29 июля 2011

Вы никогда не переопределяете поля для начала - вы всегда скрываете их.Поля не являются полиморфными ... другими словами, если вы напишите:

Superclass x = new Subclass();
System.out.println(x.field);

и оба Superclass и Subclass объявят поле с именем field, оно будет всегда в любом случае используйте суперкласс, потому что это все, что может "видеть" компилятор.

Лично я стараюсь сохранять свои переменные закрытыми в любом случае ...

...