Классы и интерфейсы
Проверь, как объясняешь различия между классами, абстрактными классами и интерфейсами. Разбери вложенные классы, модификаторы доступа и порядок инициализации, чтобы рассуждать о поведении Java-кода на интервью.
Вопросы
- Какие виды классов есть в java?
- Расскажите про вложенные классы. В каких случаях они применяются?
- Что такое «локальный класс»? Каковы его особенности?
- Что такое «анонимные классы»? Где они применяются?
- Каким образом из вложенного класса получить доступ к полю внешнего класса?
- Что такое перечисления (enum)?
- Как проблема ромбовидного наследования решена в java?
- Что такое конструктор по умолчанию?
- Могут ли быть приватные конструкторы? Для чего они нужны?
- Чем отличаются конструкторы по-умолчанию, конструктор копирования и конструктор с параметрами?
- Какие модификаторы доступа есть в Java? Какие применимы к классам?
- Что означает модификатор static?
- Может ли статический метод быть переопределён или перегружен?
- Могут ли нестатические методы перегрузить статические?
- Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
- Что можно изменить в сигнатуре метода при переопределении? Можно ли менять модификаторы (throws и тп)?
- Могут ли классы быть статическими?
- Что означает модификатор final? К чему он может быть применим?
- Что такое абстрактные классы? Чем они отличаются от обычных?
- Может ли быть абстрактный класс без абстрактных методов?
- Могут ли быть конструкторы у абстрактных классов? Для чего они нужны?
- Что такое интерфейсы? Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
- Чем интерфейсы отличаются от абстрактных классов? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
- Может ли один интерфейс наследоваться от другого? От двух других?
- Что такое дефолтные методы интерфейсов? Для чего они нужны?
- Как решается проблема ромбовидного наследования при наследовании интерфейсов при наличии default методов?
- Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
- Зачем нужны и какие бывают блоки инициализации?
- Для чего в Java используются статические блоки инициализации?
- Что произойдет, если в блоке инициализации возникнет исключительная ситуация?
- Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?
- Защита от рефлексии