ООП 3 Flashcards
восходящие преобразования (upcasting)
Преобразование потомка в родителя.
Dog dog = new Dog();
Animal animal = dog;
- Преобразование происходит автоматически, не требуя явного приведения типов.
- Методы, переопределенные в подклассе, всё равно будут вызываться, несмотря на то, что ссылка имеет тип суперкласса.
- После восходящего преобразования можно вызывать только методы и поля, которые определены в суперклассе, даже если объект фактически принадлежит подклассу.
нисходящие преобразования (downcasting)
Преобразование предка в потомка.
Animal animal = new Dog();
Dog dog = (Dog) animal;
- Всегда должно быть указано явно с помощью оператора приведения.
- Может привести к исключению времени выполнения, если объект не является экземпляром нужного типа.
- Восходящее преобразование ограничивает доступ к методам подкласса, а нисходящее преобразование позволяет вновь получить доступ к методам, специфичным для подкласса.
Чем отличается переопределение от перегрузки?
Переопределение используется тогда, когда вы переписываете (переделываете, переопределяете) УЖЕ существующий метод. Перегрузка — это использование одного имени, но с разными входными параметрами.
Способы копирования объектов
- Поверхностное копирование (Shallow Copy)
- Глубокое копирование (Deep Copy)
Поверхностное копирование (Shallow Copy)
Создаёт новый объект, но копирует ссылки на вложенные объекты, а не сами вложенные объекты. Если вложенные объекты изменяются, это изменение отразится как в оригинале, так и в копии.
Глубокое копирование (Deep Copy)
Глубокая копия создаёт новый объект и также копирует все вложенные объекты. Это нужно, если вы хотите, чтобы изменения во вложенных объектах не затрагивали оригинал.
Способы поверхностного копирования
- Метод clone()
Для использования этого метода класс должен реализовывать интерфейс Cloneable и переопределять метод clone(). - При помощи конструктора копирования.
Способы глубокого копирования
Использовать сериализацию объекта в байтовый поток и затем десериализацию его обратно в новый объект.
оператор instanceof
Оператор instanceof возвращает true, если объект является экземпляром класса или его потомком.
Зачем нужны и какие бывают блоки инициализации?
Наборы выражений инициализации полей, заключенные в фигурные скобки и размещаемые внутри класса вне объявлений методов или конструкторов.
Бывают статические и нестатические блоки инициализации.
Если блоков инициализации несколько, они выполняются в порядке следования в тексте класса.
Блок инициализации способен генерировать исключения.