OOP Flashcards
1
Что такое ООП?
- Объектно-ориентированное программирование - методология, в которой программа состоит из взаимодействующих друг с другом объектов.
- Преимущества: простота модификации, читаемость, повторное использование кода, удобная отладка и тестирование.
- Недостатки: больше расход памяти, ниже производительность.
Базовые концепции ООП?
- Инкапсуляция: объединяет данные и методы, скрывает детали реализации.
- Наследование: создание нового класса на основе существующего, наследование свойств и методов.
- Полиморфизм: использование одного интерфейса для разных реализаций метода.
- Абстракция: разделение интерфейса объекта от его реализации для упрощения поддержки и расширения кода.
Укажите из каких элементов состоит класс. Расскажите о каждом из них.
- Конструктор: метод, вызываемый при создании объекта.
- Поля класса: переменные, хранящие данные объекта.
- Методы класса: функции для работы с данными объекта.
- Вложенные классы: классы внутри класса.
- Модификаторы доступа: private, public, protected, default.
- Блок инициализации: вызывается перед конструктором.
Что такое конструктор?
- Специальный метод, вызываемый при создании объекта.
- Не имеет возвращаемого значения, используется для инициализации полей и называется так же как Класс.
- Может быть перегружен.
- Если конструктор не определён, компилятор создаёт конструктор по умолчанию.
Можно ли наследовать конструктор?
- Конструктор не является членом класса, поэтому его нельзя наследовать.
- С помощью ключевого слова super можно вызывать конструктор суперкласса из конструктора подкласса для создания экземпляра суперкласса.
- super позволяет получить ссылку на суперкласс.
- Необходимость вызова конструктора суперкласса возникает всегда, чтобы инициализировать унаследованные поля.
- Если в подклассе не указан явный вызов конструктора суперкласса при помощи super(), компилятор добавляет вызов default конструктора суперкласса без аргументов.
- Если в суперклассе существует конструктор с параметрами, его необходимо обязательно проинициализировать с помощью super() из конструктора подкласса.
- Вызов super() должен быть первым в конструкторе подкласса.
Что такое перегрузка конструктора?
- Перегрузка конструктора - это создание нескольких конструкторов в одном классе с разными параметрами.
- Если изменить порядок параметров или их тип в конструкторе, такой конструктор также считается перегруженным.
- Если аргументы не соответствуют ни одному из перегруженных конструкторов, компилятор выдаст ошибку.
- При передаче методу ссылки на объект, сама ссылка передаётся с применением вызова по значению (call by value). Копия значения по-прежнему ссылается на тот же объект, что и исходный аргумент.
Что такое статический метод?
Метод, вызываемый без создания экземпляра класса т.к. относится к классу, а не к его экземплярам.
- Может обращаться только к статическим переменным и методам класса.
- Нельзя переопределять.
Что такое не статический метод?
Метод, который принадлежит объекту, а не классу.
- Для его вызова необходимо сначала создать объект.
- Имеет доступ ко всем полям и методам объекта.
- Имеет скрытый параметр this, который указывает на текущий объект.
Для чего используется ключевое слово this?
Ключевое слово this используется для обращения к текущему объекту класса.
Позволяет:
- Отличать поле класса от параметра метода или локальной переменной с тем же именем.
- Вызывать один конструктор из другого в том же классе.
Какой класс является базовым родительским классом для всех классов?
- Класс java.lang.Object является базовым родительским классом для всех классов. Он определяет базовые методы, которые наследуются всеми классами:
- clone() создаёт копию объекта и возвращает на него ссылку .
- equals(Object) определяет, равен ли один объект другому.
- getClass() возвращает класс объекта во время выполнения.
- hashCode() возвращает хеш-код текущего объекта.
- notify() возобновляет поток, ожидающий этот объект.
- notifyAll() возобновляет все потоки, ожидающие этот объект.
- toString() возвращает строковое представление текущего объекта.
- wait() заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или notifyAll() для этого объекта.
Что такое наследование? Приведите примеры из реальной жизни.
- Механизм ООП, позволяющий создавать новые классы на основе уже существующих.
- Подкласс наследует все поля и методы суперкласса (кроме private).
- Позволяет повторно использовать код и создавать иерархию классов.
Опишите процесс создания нового объекта.
- При помощи оператора new вызывается конструктор класса.
- JVM выделяет память в Heap и инициализирует поля значениями переданными в конструкторе или значениями по умолчанию.
- Конструктор возвращает ссылку на созданный объект для доступа к его полям и методам.
Как вызвать метод из родительского класса?
- С помощью ключевого слова super можно вызвать метод из родительского класса.
- Применяется в тех случаях, когда подкласс переопределяет методы или поля суперкласса.
Что такое переопределение метода?
Переопределение метода (overriding) — это создание метода в подклассе с той же сигнатурой и типом возвращаемого значения, что и у метода суперкласса.
- При вызове метода у объекта подкласса будет вызываться переопределенный метод подкласса, скрывая метод суперкласса.
- Для доступа к методу суперкласса используется ключевое слово super.
- Для того, чтобы убедиться, что метод переопределен, используют аннотацию @Override, которая вызывает ошибку компиляции, если метод не найден в суперклассе.
- Решение о вызове переопределенного метода принимается на этапе выполнения программы при помощи т.н. позднего связывания. Вызывается метод из класса, на который ссылается переменная.
Можно ли переопределить статический метод?
Статические методы нельзя переопределять, так как они принадлежат классу, а не объекту.
- Переопределять можно только не статические методы.
- Если в подклассе переопределить статический метод суперкласса, это называться “сокрытием метода суперкласса”.
Что такое сокрытие метода?
Сокрытие статического метода происходит, если подкласс объявляет статический метод с той же сигнатурой, что и у суперкласса.
- Вызов метода происходит на основе типа ссылки на объект во время компиляции, а не во время выполнения.
Что такое виртуальная функция и используются ли они в Java?
Виртуальная функция - это любой метод, который может быть переопределён в подклассе, то есть использован в механизмах Полиморфизма.
- Все не статические методы Java являются виртуальными, кроме private и final.
- Статические методы не являются виртуальными, так как не могут быть переопределены.
Что такое перегрузка метода?
Механизм, позволяющий создавать методы с одинаковыми именами, но разными параметрами.
- Возвращаемое значение не входит в сигнатуру метода.То есть методы должны быть определены с различной сигнатурой метода.
Можно ли изменить тип возвращаемых данных при перегрузке метода?
- Тип возвращаемых данных не входит в сигнатуру метода, поэтому только изменение типа возвращаемых данных не приведет в перегрузке метода.
- Сигнатура метода должна отличаться хотя бы одним из параметров.
Что такое множественное наследование?
- Множественное наследование - это наследование свойств и методов от нескольких суперклассов.
- В Java множественное наследование классов запрещено, но класс может реализовать несколько интерфейсов.
- При реализации нескольких интерфейсов необходимо переопределить @Override все абстрактные методы интерфейсов.
- Конфликты имен с одинаковым default методом решаются с помощью явного указания имени метода.
MyInterface.super.myMethod();
Что такое полиморфизм? Приведите примеры из реальной жизни.
Полиморфизм - это принцип ООП, позволяющий использовать один интерфейс для общего класса действий и обеспечивать различную реализацию методов в разных классах.
- Полиморфизм достигается с помощью интерфейсов или переопределения методов при наследовании.
Примеры:
- Интерфейс Animal с методом makeSound(). Классы Dog и Cat реализуют его, издавая звуки “гав” и “мяу” соответственно. Используя переменную типа Animal, мы получаем звук в зависимости от конкретного объекта.
- Интерфейс Payment с методом processPayment(). Классы CreditCardPayment и PayPalPayment реализуют его для обработки платежей кредитной картой и через PayPal соответственно. Метод processPayment() работает в зависимости от типа платежа.
Что такое инкапсуляция?
Инкапсуляция - это механизм ООП, который позволяет объединить данные и методы, которые их обрабатывают, в один класс (капсула) и скрыть детали реализации от пользователя, предоставляя только интерфейс взаимодействия.
- Достигается с помощью модификаторов доступа, которые контролируют доступ к полям и методам класса.
Как реализована инкапсуляция в Java?
Инкапсуляция в Java реализована с помощью классов и модификаторов доступа.
Существуют 4 модификатора доступа:
- public (везде)
- protected (внутри пакета + наследники)
- default (внутри пакета)
- private (внутри класса)
Можно ли применить модификаторы доступа к конструкторам?
Да, модификаторы доступа можно применять к конструкторам для ограничения доступа к созданию объектов определёнными классами или пакетами.
- Такой подход используется в паттерне проектирования Singleton, либо когда мы хотим запретить создание экземпляров класса.