Какие виды классов есть в java?
В каких случаях применяются вложенные классы? (2)
1) Он должен создаваться только для того, чтобы обслуживать обрамляющий
его класс.
2) Если вложенный класс оказывается полезен в каком-либо ином контексте, он
должен стать классом верхнего уровня.
Основные различия статических и внутренних классов?
1) В. имеет доступ ко всем членам внешнего к., С. только к static
2) В. привязан (и может быть инициализирован) к объекту внешнего класса, С. независим от него и может быть вызван напрямую, или с объектом: Outer.StaticInner.staticMethod(); / outerObj = Outer.StaticInner(); outerObj.staticMethod();
Т.о., если для использования внутреннего к. мы можем обойтись без объекта внешнего к. - класс д.б. static.
4) 3) В. не может иметь static полей и методов, С. может иметь и те и те, доступ к ним возможен через объект этого статического класса.
Основные свойства локальных классов? (5)
Используется если класс необходим только внутри какого-то метода и требуется
создавать экземпляры этого класса только в этом методе.
1) видны только в пределах блока, в котором объявлены;
2) не могут быть объявлены как private/public/protected или static (по этой причине
интерфейсы нельзя объявить локально);
3) не могут иметь внутри себя статических объявлений (полей, методов, классов), но
могут иметь константы (static final);
4) имеют доступ к полям и методам обрамляющего класса;
5) могут обращаться к локальным переменным и параметрам метода, если они
объявлены с модификатором final или являются effectively final.
Основные свойства анонимных классов? (5)
Что такое перечисления (enum)?
Какие методы есть у Enum?
Особенности Enum-классов (5)
1) Конструктор всегда private или default. Нет public конструктора, поэтому нельзя создать экземпляр вне Enum => Легко создать потокобезопасный singleton без double check volatile переменных.
2) Могут имплементировать интерфейсы.
3) Не могут наследовать класс.
4) При equals() выполняется ==.
5) Может использоваться в TreeSet и TreeMap, т. к. имплементирует
Comparable => compareTo() имитирует порядок элементов, предоставляемый ordinal().
Дайте определение понятию «конструктор»
Что такое конструктор по умолчанию? (3)
Для чего нужны приватные конструкторы?
Приватный конструктор запрещает создание экземпляра класса вне методов самого класса.
Нужны для реализации паттернов, например, singleton, static factory(запрещает создание через конструктор - используем метод)
Чем отличаются конструкторы по умолчанию, конструктор копирования и
конструктор с параметрами?
Какие модификаторы доступа есть в Java? Какие применимы к классам?
private (приватный): члены класса доступны только внутри класса. Для обозначения
используется служебное слово private.
default, package-private, package level (доступ на уровне пакета): видимость класса/членов
класса только внутри пакета. Является модификатором доступа по умолчанию –
специальное обозначение не требуется.
protected (защищенный): члены класса доступны внутри пакета и в наследниках. Для
обозначения используется служебное слово protected.
public (публичный): класс/члены класса доступны всем. Для обозначения используется
служебное слово public.
Последовательность модификаторов по возрастанию уровня закрытости: public, protected,
default, private.
Во время наследования возможно изменения модификаторов доступа в сторону большей
видимости (для поддержания соответствия принципу подстановки Барбары Лисков).
Класс может быть объявлен с модификатором public и default.
Может ли объект получить доступ к члену класса объявленному как private?
Если да, то каким образом? (4)
Что означает модификатор static?
Статическая переменная – это переменная, принадлежащая классу, а не объекту.
Статический класс – это вложенный класс, который может обращаться только к
статическим полям обертывающего его класса.
Внутри статического метода нельзя вызвать нестатический
К каким конструкциям Java применим модификатор static? (5)
Может ли статический метод быть переопределен или перегружен?
Перегружен – да. Переопределен - нет.
Могут ли нестатические методы перегрузить статические?
Да. В итоге получится два разных метода. Статический будет принадлежать классу и будет
доступен через его имя, а нестатический будет принадлежать конкретному объекту и
доступен через вызов метода этого объекта.
Как получить доступ к переопределенным методам родительского класса?
С помощью ключевого слова super мы можем обратиться к любому члену родительского
класса – методу или полю, если они не определены с модификатором private.
super.method();
Можно ли сузить уровень доступа/тип возвращаемого значения при
переопределении метода?
При переопределении метода нельзя сузить модификатор доступа к методу (например, с
public до private), но можно расширить.
Изменить тип возвращаемого значения нельзя, но можно сузить возвращаемое
значение, если они совместимы. Например, если метод возвращает объект класса, а
переопределенный метод возвращает класс-наследник:
Ковариантность возвращаемого значения
Можно ли
менять при переопределении менять throws?
Секцию throws метода можно не указывать, но стоит помнить, что она остается
действительной, если уже определена у метода родительского класса. Можно
добавлять новые исключения, являющиеся наследниками от уже объявленных или
исключения RuntimeException. Порядок следования таких элементов при переопределении
значения не имеет.
Что означает модификатор final для разных сущностей? (7)
Где и для чего используется модификатор abstract?
1) классы могут выступать только предками для других классов.
2) Метод, помеченный ключевым словом abstract, – абстрактный метод, т. е. метод, который не
имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь
класс должен быть объявлен абстрактным
3) Использование абстрактных классов и методов позволяет описать некий шаблон объекта,
который должен быть реализован в других классах. В них же самих описывается лишь некое
общее для всех потомков поведение.
4) абстрактный метод не может быть вне абстрактного класса;
Что такое интерфейсы?