О чем говорит ключевое слово final?

Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.

● Класс не может иметь наследников;

● Метод не может быть переопределен в классах наследниках;

● Поле не может изменить свое значение после инициализации;

● Параметры методов не могут изменять своё значение внутри метода;

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

 

Где и для чего используется модификатор abstract?

Класс помеченный модификатором abstract называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов.

Метод помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.

Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.

 

НА ЗАМЕТКУ!!!

Особенности абстрактных классов:

1) Может быть конструктор (для вызовов по цепочке из наследников)

2) Имплементят интерфейсы, но не обязаны реализовывать их методы

3) Не могут быть final

4) Могут содержать static методы

5) Нельзя создать объект

6) Абстрактные методы могут отсутствовать

7) Может содержать метод main()

 

Можно ли объявить метод абстрактным и статическим одновременно?

Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’". Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса.

 

Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?

Ключевое слово interface используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public.

Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию default и статических static методов.

Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными public, статическими static и неизменяемыми final.

 

Что такое static метод интерфейса?

Статические методы интерфейса похожи на методы по умолчанию, за исключением того, что для них отсутствует возможность переопределения в классах, реализующих интерфейс.

Статические методы в интерфейсе являются частью интерфейса без возможности использовать их для объектов класса реализации;

Методы класса java.lang.Object нельзя переопределить как статические;

Статические методы в интерфейсе используются для обеспечения вспомогательных методов, например, проверки на null, сортировки коллекций и т.д.

 

Как вызывать static метод интерфейса?

Используя имя интерфейса:

   Paper.show();

 

К каким конструкциям Java применим модификатор static?

● полям;

● методам;

● вложенным классам;

● членам секции import.

● блоки инициализации

 

В чем разница между членом экземпляра класса и статическим членом класса?

● Модификатор static говорит о том, что данный метод или поле принадлежат самому классу и доступ к ним возможен даже без создания экземпляра класса. Поля помеченные static инициализируются при инициализации класса. На методы, объявленные как static, накладывается ряд ограничений:

● Они могут вызывать только другие статические методы.

● Они должны осуществлять доступ только к статическим переменным.

● Они не могут ссылаться на члены типа this или super.

● В отличии от статических, поля экземпляра класса принадлежат конкретному объекту и могут иметь разные значения для каждого. Вызов метода экземпляра возможен только после предварительного создания объекта класса.

 

Где разрешена инициализация статических/нестатических полей?

Статические поля можно инициализировать при объявлении, в статическом или нестатическом блоке инициализации.

Нестатические поля можно инициализировать при объявлении, в нестатическом блоке инициализации или в конструкторе.

 

НА ЗАМЕТКУ!!!

Особенности Enum классов:

1) Конструктор всегда private или default

2) Могут имплементировать интерфейсы

3) Не могут наследовать класс

4) Можем переопределить toString()

5) Нет public конструктора, поэтому нельзя создать экземпляр вне Enum

6) При equals() выполняется ==

7) ordinal() возвращает порядок элементов

8) Может использоваться в TreeSet и TreeMap т.к. Enum имплементирует Comparable

9) compareTo() имитирует порядок элементов предоставляемый ordinal()

10) Можно использовать в Switch Case

11) values() возвращает массив всех констант

12) Легко создать потокобезопасный синглтон без double check volatile переменных.

Instanceof

Оператор instanceof сравнивает объект и указанный тип. Его можно использовать для проверки является ли данный объект экземпляром некоторого класса, либо экземпляром его дочернего класса, либо экземпляром класса, который реализует указанный интерфейс.

this.getClass() == that.getClass() проверяет два класса на идентичность, поэтому для корректной реализации контракта метода equals() необходимо использовать точное сравнение с помощью метода getClass().

 

8. Модификаторы доступа: private, default, protected, public.

private (приватный): члены класса доступны только внутри класса. Для обозначения используется служебное слово private.

default, package-private, package level (доступ на уровне пакета): видимость класса/членов класса только внутри пакета. Является модификатором доступа по умолчанию - специальное обозначение не требуется.

protected (защищённый): члены класса доступны внутри пакета и в наследниках. Для обозначения используется служебное слово protected.

public (публичный): класс/члены класса доступны всем. Для обозначения используется служебное слово public.

Последовательность модификаторов по возрастанию уровня закрытости: public, protected, default, private.

Во время наследования возможно изменения модификаторов доступа в сторону большей видимости (для поддержания соответствия принципу подстановки Барбары Лисков).

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: