Что такое конструктор? Что такое конструктор по умолчанию?
Конструктор — это специальный метод, который вызывается при создании нового объекта. Конструктор инициализирует объект непосредственно во время создания. Имя конструктора совпадает с именем класса, включая регистр, а по синтаксису конструктор похож на метод без возвращаемого значения. Конструктор по умолчанию не принимает никаких параметров.
Можно ли в классе вызвать один конструктор из другого? Как это сделать?
Обратиться к конструктору из другого конструктора
можно через вызов this.
Что такое коллизия?
ситуация, когда у разных объектов одинаковые хеш-коды называется — коллизией. Вероятность возникновения коллизии зависит от используемого алгоритма генерации хеш-кода
Что такое объект?
это сгруппированные вместе данные(переменные) и методы для того, чтобы эти данные обрабатывать.
Класс Object и класс Class.
Object – является корневым в иерархии классов.
Class – экземпляры этого класса являются описаниями объектных типов в памяти JVM.
класс это чертеж или схема
Класс в Java - это шаблон для создания объекта
Класс определяет структуру и поведение, которые будут совместно использоваться набором объектов. Класс содержит переменные и методы, которые называются элементами класса, членами класса.
Все методы Object (кроме wait, notify, notifyAll).
clone() - создает новый объект, не отличающийся от клонируемого
equals(Object obj) - определяет, равен ли один объект другому
finalize() - вызывается перед удалением неиспользуемого объекта
getClass() - получает класс объекта во время выполнения
hashCode() - возвращает хэш-код, связанный с вызывающим объектом. toString() - возвращает символьную строку, описывающую объект
Анонимные классы.
Анонимные классы – это вложенные без имени класса. Они обычно объявляются либо как подклассы существующего класса, либо как реализации некоторого интерфейса.
Как классы располагаются в пакете?
Пакеты группируют классы и определяют пространства имен для классов, которые в них входят.
Модификаторы всех классов. (Private-закрытый)
доступ к члену класса не предоставляется никому, кроме методов этого класса. Другие классы того же пакета также не могут обращаться к private-членам.
(Default) доступ по умолчанию, когда никакой модификатор не присутствует — член класса считается открытым внутри своего собственного пакета, но не доступен для кода, расположенного вне этого пакета.
(Protected защищённый) — доступ в пределах пакета и классов наследников. Доступ в классе из другого пакета будет к методам public и protected главного класса.
(Public открытый) — доступ для всех из любого другого кода проекта.
Модификатор static.
применяется к полю, блоку, методу или внутреннему классу. Данный модификатор указывает на привязку субъекта к текущему классу.
Можно ли использовать статические методы в обычных? Наоборот? Почему?
Нестатические методы - методы экземпляра класса.
Статические методы - методы самого класса.
Статические методы можно вызывать откуда угодно — из любого места программы. А значит, их можно вызывать и из статических методов, и из обычных. Никаких ограничений тут нет. А
статический метод, не имея в распоряжении экземпляра класса, не может вызывать нестатический метод.
Вложенные классы Instanceof vs getClass
если getClass() проверяет полную идентичность класса, то instanceof вернет true даже если объект будет всего лишь подтипом, что может дать нам большую гибкость при активном использовании полиморфизма.
Что такое абстрактный класс?
это максимально абстрактная, очень приблизительная «заготовка» для группы будущих классов, описывает некое общее состояние и поведение, которым будут обладать будущие классы — наследники абстрактного класса.
Может ли быть конструктор у абстрактного класса? Для чего?
Да, конструктор можно использовать для задания начальных значений общих переменных, объявленных в абстрактном классе и используемых различными реализациями.
Может ли быть абстрактный класс быть без абстрактных методов?
Да
Указатели this и super.
Если написать super(), то будет вызван конструктор базового класса, а если this(), то конструктор текущего класса
Отличия интерфейса от абстрактного класса? (5 отличий)
разница между Абстрактным классом и интерфейсом
Абстракный класс
1. возможность содержать неопределенные переменные
может содержать пустые и заполненые переменные
Интерфейс
1.только явно определенные final static КОНСТАНТЫ
2. реализация методов
может содержать готовые и абстрактные методы,
обязательно реализуемые в классе наследнике
2.
может содержать только пустые методы, которые обязательно
реализовывать в реализующем классе (либо методы default)
Абстрактный класс
3. наследование и реализация
наследуется только один абстрактный класс
3. можно реализовывать множество интерфейсов , с возможностью
использования в них полей с одинаковым именем переменных
4. Может наследовать другой класс и реализовывать другой интерфейс
4. Интерфейс может расширять другой интерфейс, но не может наследовать класс.
5. Поля могут использоваться только после создания экземпляра класса-наследника
5. Поля могут использоваться в реализующих классах без создания экземпляра, т.к все поля интерфейса КОНСТАНТЫ
Что такое интерфейс?
это совокупность методов и правил взаимодействия элементов системы. Другими словами, интерфейс определяет как элементы будут взаимодействовать между собой.
Когда использовать интерфейс?
позволяет создавать модульные конструкции, в которых для изменения одного элемента не нужно трогать остальные.
Можно ли создать поля в интерфейсе?
Интерфейс может содержать поля, но они автоматически являются статическими (static)
Какие методы в интерфейсе могут иметь реализацию?
Abstract без тела метода Java7+, Static Java8+, С реализацией по умолчанию8+, Private Java9+
Контракт между hashCode и equals -
определенные правила их взаимосвязи -> Правила hashcode - для одного и того-же объекта, хеш-код всегда будет одинаковым, (если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот), если хеш-коды равны, то входные объекты не всегда равны, если хеш-коды разные, то и объекты гарантированно разные (коллизия).
Правила equals
симметричным (для любых a, b выполняется: если a = b, то b = a)
рефлексивным (для любого a выполняется: a = a)
транзитивным (для любых a, b, c выполняется: если a = b и b = c, то a = c)
Согласованность
для любых заданных значений a и b повторный вызов a.equals(b) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами.
a
b
a.equals(b)
Сравнение null
для любого заданного значения a вызов a.equals(null) должен возвращать false.
a.equals(null)
false
если a.equals(b) == true - то хэш коды равны
Ковариантность типа возвращаемого значения
при переопределении метода тип возврата переопределяющего метода может быть подтипом типа возвращаемого значения переопределенного метода.
Что значит ключевое слово native?
применяется, чтобы указать, что метод реализован не в файле Java, а на другом языке программирования.
Что такое нативные методы, их плюсы и минусы?
это метод Java (либо метод экземпляра, либо метод класса), реализация которого также написана на другом языке программирования, таком как C/C++. Кроме того, метод, помеченный как native, не может иметь тела и должен заканчиваться точкой с запятой. -- могут дестабилизировать JVM, особенно если вы попытаетесь сделать что-то сложное. Если ваш native метод делает что-то неправильно, есть вероятность аварийного завершения JVM. Сложнее дэбажить. ++ использовать для доступа к библиотекам не на jave, позволяет делать прямые системные вызовы.
Лямбда выражение
-> - Основу лямбда-выражения составляет лямбда-оператор, который разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая собственно представляет тело лямбда-выражения, где выполняются все действия. Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.
ENUM
Тип перечисления. Создает новый определенный тип - группу значений.
Методы класса ENUM
values возвращает список всех элементов enum-класса., valueof возвращает элемент перечисления,ordinal порядковый номер
Может ли ENUM наследовать класс?
- не может наследовать (extends) класс. Он сам наследованный от абстрактного класса
Может ли ENUM наследовать интерфейсы?
Да, Enum может. Поскольку Enum тип схож с классом и интерфейсом, он может наследовать интерфейс.
Что входит в сигнатуру метода?
включает только его имя и параметры.
Переопределение метода
- одна из возможностей языка программирования, позволяющая подклассу или дочернему классу обеспечивать специфическую реализацию метода, уже реализованного в одном из суперклассов или родительских классов.
Перегрузка vs Переопределение
1.Переопределение реализует полиморфизм времени выполнения, в то время как перегрузка реализует полиморфизм времени компиляции.
2. Переопределение метода происходит между суперклассом и подклассом. Перегрузка происходит между методами одного и того же класса.
3. Переопределяющие методы имеют одинаковую сигнатуру, т. е. одинаковое имя и аргументы метода. Имена перегруженных методов одинаковы, но параметры разные.
4. При перегрузке вызываемый метод определяется во время компиляции. При переопределении вызов метода определяется во время выполнения на основе типа объекта.
5. Если переопределение прерывается, это может вызвать серьезные проблемы в нашей программе, потому что эффект будет виден во время выполнения. В то время как если перегрузка прервется, возникнет ошибка во время компиляции, и ее легко исправить.
Для чего нужна аннотация Overide?
обозначает переопределяемые (реализуемые) методы в потомках и предотвращает потенциальные ошибки, которые могли быть при определении метода с другой сигнатурой.
Что можно делать при переопределении метода, а что нельзя?
При переопределении метода нельзя сузить модификатор доступа к методу (например с public в MainClass до private в Class extends MainClass). Изменить тип возвращаемого значения при переопределении метода нельзя, будет ошибка attempting to use incompatible return type. Но можно сузить возвращаемое значение, если они совместимы.
Может ли статический метод быть перегружен?
- Статические методы можно перегрузить. В том числе можно перегрузить его нестатическим методом
Будет ли работать переопределение статического метода?
не могут быть переопределены. Класс наследник может объявлять метод с такой же сигнатурой, что и супер класс, но это не будет переопределением. При вызове переопределенного метода JVM выбирает нужный вариант основываясь на типе объекта. Вызов же статического метода происходит без объекта.
Final
Суть - сделать дальнейшее изменение объекта невозможным. ( поле-переменную не изменить, метод- не переопределить, класс- не создать наследника)
Какие методы называются перегруженными
Создание метода с тем же именем, но с другим набором параметров называется перегрузкой.
Как реализована неизменность String?
Строки в Java являются immutable, String на Java был сделан final.
между передачей параметров по ссылке или по значению ?
Передача по значению (by value). Значения фактических параметров копируются. Вызываемый метод создает свою копию значений аргументов и затем ее использует. Поскольку работа ведется с копией, на исходный параметр это никак не влияет. Передача по ссылке (by reference). Параметры передаются как ссылка (адрес) на исходную переменную. Вызываемый метод не создает свою копию, а ссылается на исходное значение. Следовательно, изменения, сделанные в вызываемом методе, также будут отражены в исходном значении.
свой Immutable тип данных?
Объявить класс окончательным, чтобы его нельзя было расширить. Сделайть все поля закрытыми, чтобы прямой доступ был запрещен. Не предоставлять методы настройки для переменных. Сделайть все изменяемые поля окончательными , чтобы его значение можно было присвоить только один раз. Инициализировать все поля с помощью конструктора , выполнив глубокое копирование. Выполнить клонирование объектов в методах получения, чтобы вернуть копию, а не фактическую ссылку на объект.
Где хранятся ссылки на объект?-
в стэке.
В какой области памяти хранятся примитивы?-
в стэке
В какой области памяти хранятся объекты?
– в куче( heap).
Что такое позднее и раннее связывание?
Если связывание проводится компилятором перед запуском программы, то оно называется статическим или ранним связыванием. Позднее связывание это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим или связыванием на стадии выполнения.
Что такое varargs? Какие есть ограничения при написании?
это технология, которая позволяет создавать методы с произвольным количеством аргументов. должен быть последним параметром, что должен быть только один varargs параметр.
Что такое ООП? В чём его плюсы?
это стиль написания программ основанный на использовании в программе объектов и классов. Уменьшает избыточность кода. Улучшает читаемость кода. Проще в модификации.
Принципы ООП.
Инкапсуляция, Наследование, Полиморфизм, Абстракция
Что такое наследование?
это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.
Что такое инкапсуляция? Приведите пример инкапсуляции?
это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании.
полиморфизм? Приведите пример полиморфизма?
это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Что такое абстракция?
это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Что такое композиция?
тоже что и агрегация, но более сильный вид связи между классами/объектами, при котором контроль за жизненным циклом агрегируемого объекта выполняется непосредственно полностью внутри класса где он используется.
Что такое агрегирование?
это использования объекта одного класса в другом.
Last changed2 years ago