Экзамен ООП | Блок 7 Flashcards

1
Q

Что такое вложенные классы? Зачем они нужны?

A

Вложенный (nested) класс - класс, который определен внутри другого класса.

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

Вложенные классы делятся на:
- Статические (static);
- Нестатические;

Когда используются?
- Когда реализуемый класс необходимо скрыть от других классов того же пакета, т.е. повысить инкапсуляцию;
- Когда нам необходим полный доступ к полям и методам класса, членом которого будет являться вложенный класс;
- Для увеличения логической связанности и читаемости кода, когда вложенный класс используется только во внешнем классе и располагается ближе к месту использования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие типы вложенных классов существуют в Java?

A

Вложенные классы делятся на:
- Статические (static) ;
- Нестатические (внутренние классы);
- Внутренние;
- Локальные;
- Анонимные;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое внутренний класс? Когда он применяется?

A

Внутренний (inner) класс - нестатический вложенный класс, связанный с объектом внешнего класса.

  • Имеет доступ ко всем полям и методам (в т.ч. private) внешнего класса и может ссылаться на них напрямую;
  • Имеет доступ ко всем полям и методам родителей внешнего класса, к которым имеет доступ внешний класс (public, protected);
  • Может наследовать обычные классы и внутренние классы, определенные во внешнем классе и его предках;
  • Может быть наследован внутренними классами, определенными во внешнем классе и его наследниках;
  • Может имплементировать интерфейсы;
  • Может содержать только нестатические методы, статические поля должны быть объявлены final;

Внутренние (inner) классы делятся на:

  1. Внутренние классы - нестатические вложенные классы, связанные с объектом внешнего класса.
  2. Локальные классы - объявленные внутри блока и не являющиеся членом внешнего класса. В этом случае можно рассматривать класс как локальную переменную типа класс.
  3. Анонимные классы - наследуемые от класса, при объявлении не задается имя класса.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое статический вложенный класс? Когда он применяется?

A

Статический вложенный класс - разновидность вложенного класса, объявляемая с модификатором static. В отличие от внутренних (inner) классов является более независимым. Принадлежит внешнему классу, а не экземпляру класса.

  • Имеет доступ к статическим полям и методам внешнего класса (в т.ч. private);
  • Если создан экземпляр класса, то можно получить доступ ко всем нестатическим полям и методам внешнего класса (в т.ч. private);
  • Может содержать статические и нестатические поля и методы;
  • Может быть создан в неограниченных количествах;
  • Может наследовать обычные классы и статические вложенные классы, определенные во внешнем классе и его предках;
  • Может быть наследован любым классом!;
  • Область видимости определяется согласно модификатора доступа;

Когда используются?
- Когда прямая связь между вложенным и внешним классом не требуется.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Сколько объектов статического вложенного класса можно создать в программе?

A

Статический вложенный класс может быть создан в неограниченных количествах.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое локальный класс? Когда он применяется?

A

Локальный класс является подвидом внутреннего класса, объявленного внутри какого-либо блока кода {}. Не является членом внешнего класса и, по сути, является локальной переменной типа Класс.

  • Имеет наименование, может быть использован неоднократно;
  • Область видимости как у локальной переменной;
  • В зависимости от того, в каком контексте объявлен - static, non static, имеет доступ либо только к статическим, либо ко всем (включая private) полям и методам внешнего класса;
  • В нестатическом контексте содержит ссылку на внешний класс;
  • Время жизни ограничено временем жизни блока кода, в котором объявлен локальный класс, либо существующими ссылками на объект этого класса;
  • В объявлении локального класса допустим только модификатор final.
  • Работает только с final или Effective final переменными;
  • Может содержать в себе нестатические свойства и методы и статические константы (static final);
  • Может наследовать:
    • обычные классы;
    • внутренние классы, определенные во внешнем классе и его предках;
    • локальные классы, определенные в том же методе;
  • Может быть наследован локальным классом, определенным в том же методе;
  • Может имплементировать интерфейс;

Когда используются?
- Локальные классы - это способ инкапсуляции. Используются для создания вспомогательных классов в пределах блока кода или метода;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое анонимный класс? Когда он применяется?

A

Анонимный класс - это локальный класс без имени, который обязательно наследует какой-либо класс или реализует какой-либо интерфейс. Нужен в случае, когда нам необходим локальный класс для одноразового использования.

  • Из него видны все свойства и методы внешнего класса (обычные и static), а так же public и protected свойства и методы родителя внешнего класса, т.е. те, которые видны во внешнем классе.
  • Может содержать в себе только нестатические переменные и методы.
  • Анонимный класс живет, пока не него существует ссылка;
  • Виден только в методе, в котором определен;
  • Не может быть наследован;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Сколько объектов анонимного класса можно создать в программе?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly