Ревью3. Ооп статики Интерфейсы
Скачать 26.61 Kb.
|
ООП Статики Интерфейсы Абстрактные Енум 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. И если класс, реализующий данный интерфейс, не реализует метод. И статические методы. 44) Сколько максимум можно имплементировать интерфейсов? 65535 45) Модификаторы доступа в интерфейсе и абстрактном классе? У класса любые. У интерфейса public по умолчанию 46) Из обычного сделать абстрактный не используя abstract? Объявить класс с приватным конструктором. 47) Может ли enum имплементировать интерфейсы? Наследовать классы? Почему? Интерфейсы - да, классы - нет. Енум уже наследуется от абстрактного класса Java.lang.enum, а джава не поддерживает множественное наследование. 48) Контракт между equals и hashcode. Если обьекты равны по equals() то их хеш-коды тоже равны Если хеш-коды разные, то по equals() будет точно - false Если обьекты не равны по equals(), их хеш-коды могут быть равны Если хеш-коды равны. Обьекты могут быть равны, а могут и не равняться. 49) Использовать статич методы в обычных? Наоборот? Почему? Статич можно использовать в обычном, а обычный в статич не имея ссылки на конкретный экземпляр класса использовать нельзя. 50) Ковариантность типа возвращаемого значения? Ковариантность означает, что мы можем получить доступ к определенным элементам, определенным через их супертип. Ковариантность типа возвращаемого значения - переопределенный метод родительского класса может вернуть тип, производный от типа, возвращаемого методом базового класса. 51) Передали массив в метод, сменивший его значения, изменятся ли они вне метода? Почему? Массив находится в куче, которая также хранит данные примитивов. Передавая массив в метод, мы получим копию ссылки, по ней мы можем изменить состояние объекта в куче. При передаче в метод примитива, создаётся копия, значение которой мы можем менять внутри метода как угодно, но на само значение это никак не повлияет. 52) Передача параметров в методы по значению или ссылке? Как передаются примитивы и объекты? В джава в метод передается все по значению. Вне зависимости от того, что мы передаем: примитив или объект. Если примитив, то переданное значение копируется в свою отдельную локальную переменную, изначальная переменная остается без изменений. 53) Контракт метода? Все то что идёт после модификатора доступа. 54) Сокрытие методов(method hiding)? Метод скрытия означает, что подкласс определяет метод класса с той же сигнатурой, что и метод класса в суперклассе. В этом случае метод суперкласса скрыт подклассом. Это означает, что: версия метода, который выполняется, не будет определяться объектом, который используется для вызова. Фактически он будет определяться типом ссылочной переменной, используемой для вызова метода. 55) Может ли Статический метод быть перегружен? Будет ли работать переопределение статич метода? Да. Не будет. Класс потомок создаст свой статический метод не связанный с родительским классом. 56) Абстрактный класс без абстрактных методов? Существуют. 57) Где хранятся объекты? В куче HEAP. 58) Где хранятся ссылки на объект? Где хранятся примитивы? В стэке. 59) varargs? Ограничения при написании? String… words Аргумент переменной длины, позволяющие создавать методы с произвольным количеством аргументов(JDK 5). Должен быть последним в списке аргументов и может быть записан только как аргумент некого метода. 60) Аннотация @Override? Указывает, что далее мы собираемся переопределять метод класса родителя или интерфейса. Служит для контроля успешности действия при сборке проекта. 61) Класс Class. Нет публичных конструкторов. Generic тип. Методы класса предназначены для получения информации о классе (объекта типа class). Можно узнать полное имя класса, его аннотации, конструкторы. Эти методы нужны для reflection. С его помощью вы можете создавать объекты, которые принадлежат этому классу и при этом заранее класс объекта вы можете не знать. 62) Экземпляр и объект класса чем отличаются? Одно и то же. |