ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.03.2024
Просмотров: 25
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ООП
Статики
Интерфейсы
Абстрактные
Енум
1)Что такое ооп и его плюсы.
Cпособ программирования, основанный на представлении программы в виде совокупности объектов, каждый из которых является экземпляром отдельного класса, а классы образуют иерархию наследования.
Облегчает подход к написанию программы. Благодаря ооп легче разобраться в коде. Внедрять изменения без необходимости переписывать весь код.
2)Основные принципы.
Полиморфизм, инкапсуляция, наследование, абстракция.
Абстракция. Пример.
Выделение набора значимых характеристик объекта исключая не значимые.
Реализовано с помощью абстрактные классы и интерфейсы
3)Инкапсуляция. Пример.
Механизм обертывания, позволяющий объединить методы и поля в отдельный класс с целью защиты данных от изменений извне. Доступ же к ним будет через методы этого класса (гетеры и сеттеры)
4)Полиморфизм. Пример.
Данный принцип позволяет применять одноименные методы с одинаковыми или различными параметрами в одном классе или в группе классов, связанных наследованием.
Переопределение метода(позволяет наследнику реализовать метод, уже реализованный в родителе), перегрузка метода(передаваемые в метод аргументы).
Любая переменная, которой присваивается значение другого типа.
Функция, принимающая аргументы различных типов.
5)Наследование. Пример. Зачем.
Свойство системы позволяющее описать новый класс на основе уже существующего с частично или полностью взаимствующейся функциональностью.
Extends, полиморфизм.
Позволяет повторно использовать код одного класса в другом классе.
6)Класс. Объект.
Класс - способ описания сущности, определяющий поведение, зависящее от состояния, и само состояние, а также правила взаимодействия с данной сущностью.
Объект - отдельный представитель класса, имеющий конкретное состояние и поведение, определяемое классом.
7)Как передаются объекты в метод?
Также как и примитивные значения, однако при передаче объектов в качестве значения передается копия ссылки на область в памяти, где расположен объект.
8)Переопределение метода. Что можно делать, а что нельзя?
Реализация метода, уже ранее реализованного в родительском классе.
Тот же контракт и тот же модификатор доступа, что и у родителя.
9)Перегрузка метода.
Методы с одним именем, но с разными типами и количеством параметров.
10)Что такое нативные методы. Плюсы, минусы. Ключевое слово native.
Если существует необходимость использовать уже существующий код, но написанный на другом языке, используется ключевое слово native. Могут быть вызваны из среды приложения Java, но создаются на одном из родственных языков таких как С/С++. Методы, написанные на других языках более низкого уровня(С, С++).
Минусы: при обращении к нативным методам свойства переносимости и безопасности, присущие джава, будут утеряны.
Плюсы: закрывает потребности использования низкоуровневых функций для обращения к памяти, выполнить определенные задачи, которые проще выполнить на низкоуровневом языке.
Пример это hashCode(). Используется нативный метод потому что C++ имеет доступ к памяти.
11)Модификаторы доступа.
Private(видимость в классе), default(класс, пакет), protected(класс, пакет, подклассы), public.
12) final. Что может быть и как работают.
Для класса - запрещено наследование. Для метода - не может быть переопределен у наследников. Для переменных - невозможность изменить после присвоения значения. Для ссылочных переменных - нельзя изменить ссылку на объект. Ссылку изменить нельзя, но состояние объекта можно.
13)Как реализована неизменность стринг.
Имеет модификатор доспупа private и модификатор final, нет сеттеров.
14)Как реализовать свой Immutable тип данных?
Должен быть объявлен как final, все поля private, без сеттера, параметризованные конструкторы, через которые осуществляется первоначальная инициализация полей класса.
15)Static. Что может быть.
static (Метод и Поле) говорит о том что метод или поле класса принадлежат не объекту, а самому классу
static Класс может быть только вложенным и имеет доступ только с статическим полям обертывающего класса
16)Могут ли нестат методы перегрузить стат?
Перегрузить да, переопределить нет.
17)Пакет и как создать?
Логическая структура, объединяющая классы.
Package название_пакета;
18)Конструктор?По умолчанию?
Специальный метод, который вызывается при создании нового объекта.
Конструктор, не имеющих параметров.
19)Расскажи, что такое this и super? Когда мы обязаны использовать this и super?
Могут использоваться внутри конструкторов для вызова других конструкторов.
This ссылается на объект в текущием классе, в котором они используются.
Super - на объект в родительском классе. Каждый конструктор при отсутствии явных вызовов других конструкторов неявно вызывается с помощью super().
20)Класс Object и все методы кроме wait, notify, notifyAll.
Специальный класс от которого наследуются все классы.
Equals() - сравнение объектов по значению,
hashcode() - возвращает хеш-код для объекта,
getClass() - возвращает класс объекта во время выполнения,
toString() - строковое представление объекта,
clone() - создаёт и возвращает копию объекта,
finalize() - может вызываться сборщиком мусора в момент удаления объекта при сборке мусора.
21)Зачем нужен метод finalize?
Предназначен для автоматического освобождения системных ресурсов, занимаемых объектом, на котором будет данный метод вызван.
Однако не рекомендуется его использовать: замедляет работу по очистке, может быть не вызван.
Используется в двух случаях: 1 - проверка/подчистка ресурсов с логированием, 2 - работа с нативным кодом, который не критичен к утечке кода.
22)Из-за чего происходят коллизии?
Коллизия - у двух разных объектов одинаковые hashcode’ы.
Хэшкод отображается в типе Integer, диапазон которого состоит из 4 миллиарда разных целых чисел. Диапазон огромен, но не бесконечен, из-за этого возникают ситуации с коллизией.
23)В чём разница между instanceOf и getClass?
Instanceof проверет является ли данный объект экземпляром некоторого класса, либо экземпляром его дочернего класса, либо экземпляром класса, который реализует указанный интерфейс (Был ли объект создан на основе какого то класса).
getClass() проверяет два типа на идентичность.
24)Перечислите методы именно класса Enum?
Тип перечисления, создающий новый определенный тип - группу значений.
ordinal() - индекс константы,
values() - массив констант,
valueOf() - возвращает элемент перечисления с названием в скобках.
25)Что такое интерфейс? Когда использовать интерфейс?
Интерфейс - ссылочный тип, схожий с классом. Имеет абстрактные методы, которые реализует наследник. Модификатор доступа по умолчанию public.
Когда нужно описать то, что может быть реализовано классами, реализующими этот интерфейс.
26)Можно ли создать поля в интерфейсе?
Да, но они автоматически являются статическими и неизменными.
27)Есть ли в Java множественное наследование?
Java не поддерживает множественное наследование.
28)Можно ли создавать статик методы в интерфейсах?
Можно, статический метод в интерфейсе должен обязательно быть реализован в месте объявления.
29)Что такое абстрактный метод?
Метод без реализации с ключевым словом abstract.
Может находится только в абстрактном классе и интерфейсе(по умолчанию)
30)Что такое абстрактный класс? Чем отличается от обычного?
Класс в объявлении которого есть ключевое слово abstract. Нельзя создать объект или экземпляр данного класса. Только абстрактный класс может создать абстрактный метод, у которого есть только объявление.
31) Раннее и позднее связывание?
Раннее - связанное с формированием кода на этапе компиляции. При нем программный код формируется на основе известной информации о типе ссылки. Как правило это ссылка на базовый класс в иерархии классов.
Позднее - связанное с формированием кода на этапе выполнения. Если в иерархии классов встречается цепочка виртуальных методов (с помощью слов virtual, override), то компилятор строит так называемое позднее связывание. При нем вызов объекта происходит на основании типа объекта, а не типа ссылки на базовый класс. Используется если нужно реализовать полиморфизм.
32) Правила equals.
● Рефлексивность: для любого заданного значения x, выражение x.equals(x) должно возвращать true. Заданного — имеется в виду такого, что x != null
● Симметричность: для любых заданных значений x и y, x.equals(y) должно возвращать true только в том случае, когда y.equals(x) возвращает true.
● Транзитивность: для любых заданных значений x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, x.equals(z) должно вернуть значение true.
● Постоянство: для любых заданных значений x и y повторный вызов x.equals(y) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами.
● Сравнение null для любого заданного значения x вызов x.equals(null) должен возвращать false.
-
Использовать == для проверки ссылки на объект, переданной в метод. Если совпадают, вернуть true. -
Оператор instanceof(либо getClass()) для проверки типов. -
Преобразовать аргумент к необходимому типу. -
Пройтись по всем полям и сравнить их с друг другом. Если все равны, вернуть true. Для простых типов - ==, полей с ссылкой - equals, для float - привести к инт с помощью Float.floatToIntBits и сравнить с помощью ==, для double - привести к long с помощью Double.doubleToLongBits и сравнить с помощью ==, для коллекций - все правила применяются к каждому элементу коллекции. Также нужно учитывать возможность null у полей/объектов.
33) Можно ли переопределить нативный метод?
Нет. Могут быть переопределены не нативными
34) Композиция?
Формирование целого из частей. Наследуются атрибуты / возможности другого класса. Класс имеет компонент другого класса(Автомобиль <- двигатель).
35) Агрегация?
Когда один объект имеет ссылку на другой объект и при этом оба могут существовать независимо.
36) Отличие параметрического полиморфизма от ad-hoc.
Параметрический полиморфизм - выполняется одна и та же функция вне зависимости от типов аргументов.
Ad hoc - несколько объявлений функции с одинаковым именем, но с отличающимися параметрами. (Статический полиморфизм)
37) Может ли быть конструктор у абстрактного класса? Зачем?
Да, но вызвать такой конструктор можно только при формировании цепочки конструкторов, то есть при создании экземпляра конкретного класса-реализации.
Для ограничения конкретных реализаций абстрактного класса сборкой, определяющей класс.
38) Будет ли в классе конструктор и какой, если при его создании ни один не был задан?
Если при создании класса не был явно создан конструктор, то используется неявный конструктор по-умолчанию.
39) Зачем this в конструкторе абстрактного класса?
Абстрактный класс может расширяться не абстрактным классом, который унаследует его методы и свойства.
40) Уже есть рандомный конструктор, будет ли создан автоматический конструктор по-умолчанию?
Нет. Нужно создавать явно
41) Можно ли в классе вызвать один конструктор из другого? Как?
Да, this() и передать параметры вызывающего конструктора. Также можно вызвать конструктор родительского класса с помощью super().
42) Синтаксически отличия интерфейса от абстрактного класса.
-
Интерфейс описывает только поведение, абстр класс же описывает и поведение и состояние. -
Абстрактный класс связывает между собой и объединяет классы, имеющие очень близкую связь. Интерфейс же может быть реализован классами, между которыми нет ничего общего. -
Классы могут иметь большое количество интерфейсов, но наследоваться только от одного класса.
43) Какие методы в интерфейсе могут иметь реализацию?
Методы по умолчанию, имеющие модификатор доступа default. И если класс, реализующий данный интерфейс, не реализует метод. И статические методы.