Автор: Widowmaker1984

Вопросы 49-52, 54, 56-58 (модификаторы abstract, final и static)

"Где и для чего используется модификатор abstract?"
"Можно ли объявить метод абстрактым и статическим одновременно?"
"Что означает ключевое поле static?"
"К каким конструкциям Java применим модификатор static?"
"Можно ли перегрузить static метод?"
"Какие особенности инициализации final static переменных?"
"Как влияет модификатор static на класс/метод/поле?"
"О чем говорит ключевое слово final?"


1. Java предоставляет ряд модификаторов не для доступа, а для реализации многих других функциональных возможностей:
- модификатор static применяется для создания статических методов и переменных класса;
- модификатор final используется для завершения реализации классов, методов и переменных;
- модификатор abstract необходим для создания абстрактных классов и методов;
- модификаторы synchronized и volatile используются в Java для потоков.

скрытый текст2. Модификатор abstract используется для создания абстрактных классов и методов.

2.1. Абстрактный класс не может создать экземпляр. Если класс объявлен как abstract, то единственная цель для него быть расширенным через наследование. Класс не может быть одновременно abstract и final, так как класс с модификатором final не может быть расширенным.

2.1.1. Если класс содержит абстрактные методы, он должен быть объявлен как abstract. В противном случае будет сгенерирована ошибка компиляции. Абстрактный класс не обязан содержать абстрактные методы и может содержать обычные.

2.2. Абстрактный метод является методом, объявленным без реализации (без тела метода). Методы abstract никогда не могут быть final. Абстрактный метод заканчивается точкой с запятой. Пример: public abstract sample();

2.2.1. Любой класс, который расширяет абстрактный класс должен реализовать все абстрактные методы суперкласса, если сам не является абстрактным классом.

3. Модификатор static применяется для создания статических методов и переменных класса которые будут существовать или вызываться независимо от каких-либо его экземпляров. Они доступны с использованием имени класса, за которым следует точка и соответствующее имя. Также static применим к внутренним классам и логическим блокам).

3.1. Статические переменные также известны как переменные класса. Они инициализируются во время его загрузки, имеют одну копию, независимо от количества созданных экземпляров класса. Статические поля не сериализируются (только при реализации интерфейса Serializable). В Java локальные переменные не могут быть объявлены статическими (static).

3.2. Статические методы могут вызывать только другие статические методы и имеют доступ только к статическим переменным. Они не могут ссылаться на экземпляр объекта, используя this или super.

3.2.1. Абстрактные методы не могут быть static, потому что модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени текущего класса. Не static методы не могут быть переопределены как static. Сами же статичные методы нельзя переопределить вовсе (хотя можно перегрузить).

3.3. Статические блоки выполняются во время загрузки класса.

4. Модификатор final используется для завершения реализации классов, методов и переменных (включая локальные).

4.1. Переменная с final может быть инициализирована только один раз. Они не инициализируются по умолчанию, необходимо явно присвоить значение при объявлении или в конструкторе, иначе – ошибка компиляции. Ссылочная переменная, объявленная как final, никогда не может быть назначена для обозначения другого объекта. Однако поля объекта могут быть изменены. Также это справедливо и для массивов, потому что массивы являются объектами: массив может быть изменен, но переменная всегда будет ссылаться на тот же самый массив.

4.1.1. С переменными модификатор final часто используется совместно со static, чтобы сделать переменную класса константой. Подобные переменные должны быть инициализированы во время объявления или в статическом блоке.

4.2. Метод с final не может быть переопределен. Аргументы методов, обозначенные как final, предназначены только для чтения, при попытке изменения будет ошибка компиляции.

4.3. От класса с final нельзя наследоваться. Поэтому все его методы не могут быть переопределены и неявно также становятся финальными.

Комментарии


Лучшее   Правила сайта   Вход   Регистрация   Восстановление пароля

Материалы сайта предназначены для лиц старше 16 лет (16+)