Наследование классов. Модификаторы final, static
(продолжение).
Предположим что мы проектируем некий базовый класс и по каким либо
причинам хотим чтобы какой-то метод этого класса не мог быть
переопределен в наследуемых классах. Java предоставляет такую
возможность путем добавления аттрибута final перед описанием метода.
Пример:
class A {
int a;
final int geta () {
return a;
}
}
Этот же аттрибут может быть применен к данным. Поля с аттрибутом final
являются константами, т.е. не могут быть изменены по ходу выполнения
программы.
class modern {
final int YearWasWritten = 2001;
}
Имейте в виду что понятие константы здесь существует в классе, т.е.
константа появляется в момент создания экземпляра класса и является
частью экземпляра, ее нет ни до создания экземпляра ни после его удаления.
Давайте теперь представим ситуацию когда нам нужно предоставить какие-то
данные или методы, которые мы не хотим связывать ни с одним объектом.
Для этих целей в Java есть аттрибут static. Поля и методы объявленные
с аттрибутом static нызываются статическими (поля и методы класса).
Статические поля и методы определяются в момент объявления класса, для
обращения к ним не обязательно создавать экземпляр класса, к ним
можно обращаться по имени класса, они едины для всех экземпляров своего
класса.
Пример:
class Cards {
static SPADES = 1;
static CLUBS = 2;
static DIAMONDS = 3;
static HEARTS = 4;
}
Cards MyCards;
Здесь я объявил класс Cards и его экземпляр MyCards. К статическим полям
класса Cards (а я объявил только такие)
можно обратиться как Cards.SPADES так и MyCards.SPADES и т.п., в обоих
случаях мы обращаемся к одним и тем же данным. Изменение статических полей
соответственно приводит к изменению данных во всех экземплярах класса.
Если для класса Cards желательно чтобы SPADES, CLUBS, DIAMONDS, HEARTS
представляли константы можно добавить аттрибут final.
class NewCards {
final static SPADES = 1;
final static CLUBS = 2;
final static DIAMONDS = 3;
final static HEARTS = 4;
}
Конструкция final static-это достаточно типичный способ объявления
констант в языке Java.