ООП 1 Flashcards

1
Q

принципы ООП

A
  1. Абстракция
  2. Инкапсуляция
  3. Наследование
  4. Полиморфизм
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Абстракция

A

Выделение значимой информации и исключение из рассмотрения незначимой. Правильное разделение программы на объекты.

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

Инкапсуляция

A

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

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

Наследование

A

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

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
  1. Проблема ромбовидного наследования: A и B наследуются от C. D наследуется от A и B. Чьи методы должен использовать D?
  2. Неоднозначности при вызове методов c одинаковой сигнатурой.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

класс

A

Класс – это шаблон, описывающий общие свойства группы объектов. Этими свойствами могут быть как характеристики объектов так и их поведения

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
9
Q

виды конструкторов

A
  1. Конструктор по умолчанию. Не принимает никаких параметров.
  2. Конструктор копирования. Принимает в качестве параметра объект класса.
  3. Конструктор с параметрами. Принимает на вход параметры (обычно необходимые для инициализации полей класса).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

модификации уровня доступа

A
  1. private
    - доступ только методам класса
  2. default (package private)
    - доступ только методам класса и пакеджа
  3. protected
    - доступ методам класса, пакеджа и классов наследников
  4. public
    - доступ без ограничений
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

класс с единственным private конструктором

A

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

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

this

A

используется для обращения к текущему классу

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

super

A

используется для обращения к родительскому классу

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

сигнатура метода

A

имя метода плюс параметры (причем порядок параметров имеет значение)

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

что не входит в сигнатуру метода

A

возвращаемое значение, бросаемые им исключения, а также модификаторы

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

перегруженные методы

A

несколько методов с одинаковыми именами, но разными параметрами

17
Q

Могут ли нестатические методы перегрузить статические?

A

Да.
Это будут просто два разных метода для программы.
Статический будет доступен по имени класса.

18
Q

переопределенный метод

A

Метод в классе-наследнике, совпадающий по сигнатуре с методом из родительского класса.
Переопределить родительский статический метод нельзя

19
Q

Может ли метод принимать разное количество параметров одного типа (аргументы переменной длины)?

A

Да.
Запись имеет вид method(type … val).
Например public void method(String … strings), где strings это массив

20
Q

Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?

A

При переопределении метода нельзя сузить модификатор доступа к методу (например с public в MainClass до private в Class extends MainClass).
Изменить тип возвращаемого значения при переопределении метода нельзя, будет ошибка. Но можно сузить возвращаемое значение, если они совместимы.

21
Q

восходящие преобразования (upcasting)

A

Преобразование потомка в родителя.
Dog dog = new Dog();
Animal animal = dog;
- Преобразование происходит автоматически, не требуя явного приведения типов.
- Методы, переопределенные в подклассе, всё равно будут вызываться, несмотря на то, что ссылка имеет тип суперкласса.
- После восходящего преобразования можно вызывать только методы и поля, которые определены в суперклассе, даже если объект фактически принадлежит подклассу.

22
Q

нисходящие преобразования (downcasting)

A

Преобразование предка в потомка.
Animal animal = new Dog();
Dog dog = (Dog) animal;
- Всегда должно быть указано явно с помощью оператора приведения.
- Может привести к исключению времени выполнения, если объект не является экземпляром нужного типа.
- Восходящее преобразование ограничивает доступ к методам подкласса, а нисходящее преобразование позволяет вновь получить доступ к методам, специфичным для подкласса.

23
Q

Чем отличается переопределение от перегрузки?

A

Переопределение используется тогда, когда вы переписываете (переделываете, переопределяете) УЖЕ существующий метод. Перегрузка — это использование одного имени, но с разными входными параметрами.

24
Q

Способы копирования объектов

A
  1. Поверхностное копирование (Shallow Copy)
  2. Глубокое копирование (Deep Copy)
25
Q

Поверхностное копирование (Shallow Copy)

A

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

26
Q

Глубокое копирование (Deep Copy)

A

Глубокая копия создаёт новый объект и также копирует все вложенные объекты. Это нужно, если вы хотите, чтобы изменения во вложенных объектах не затрагивали оригинал.

27
Q

Способы поверхностного копирования

A
  1. Метод clone()
    Для использования этого метода класс должен реализовывать интерфейс Cloneable и переопределять метод clone().
  2. При помощи конструктора копирования.
28
Q

Способы глубокого копирования

A

Использовать сериализацию объекта в байтовый поток и затем десериализацию его обратно в новый объект.