это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Полиморфизм – способность объекта принимать множество различных форм. Наиболее распространенное использование полиморфизма в ООП происходит, когда ссылка на родительский класс используется для ссылки на объект дочернего класса.
Перегрузка происходит между методами одного и того же класса.
public- самый открытый
protected- доступен в пакете и производном классе(только через произвольный класс)
private- только в пределах класса.
модификатор по умолчанию - Такие поля или методы видны всем классам в текущем пакете.
Статические методы можно перегрузить. В том числе можно перегрузить его нестатическим методом
перереопределение статического методы не работает
Класс наследник может объявлять метод с такой же сигнатурой, что и супер класс, но это не будет переопределением.
Нестатические методы - методы экземпляра класса.
Статические методы - методы самого класса.
Статические методы можно вызывать откуда угодно — из любого места программы. А значит, их можно вызывать и из статических методов, и из обычных. Никаких ограничений тут нет. А статический метод, не имея в распоряжении экземпляра класса, не может вызывать нестатический метод.
если getClass() проверяет полную идентичность класса, то instanceof вернет true даже если объект будет всего лишь подтипом, что может дать нам большую гибкость при активном использовании полиморфизма.
ситуация, когда у разных объектов одинаковые хеш-коды называется — коллизией. Вероятность возникновения коллизии зависит от используемого алгоритма генерации хеш-кода
Да, конструктор можно использовать для задания начальных значений общих переменных, объявленных в абстрактном классе и используемых различными реализациями.
тот же класс. но может быть только вложенным и имеет доступ только с статическим полям обертывающего класса
Ссылочный тип схожий с классом.Имеет в себе абстрактные методы, которые реализует класс потомок
это вложенные классы которые не имеют имени и создаются во время инициализации объекта. наследуется от родительского класса
временные классы
это специальный класс от которого наследуется все классы. класс object имеет свои методы, такие как:- toString - возвращает символьную строку описывающую объект- equals() - сравнивает объекты - hashCode() - возвращает хеш-код связанный с вызывающим обьектом- clone() - создает объект не отличающийся от клонируемого- getClass - получает класс объекта во время выполнения- finalize() - вызывается при сборке мусора
Если обьекты равны по equals() то их хеш-коды тоже равны
Если хеш-коды разные, то по equals() будет точно - false
Если обьекты не равны по 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 - то хэш коды равны
Тип перечисления. Создает новый определенный тип - группу значений.-
Enum может наследовать интерфейсы.- Enum не может наследовать (extends) класс.
Поскольку Enum уже наследуется от абстрактного класса java.lang.Enum, понятно, что другой класс наследовать не удастся, поскольку Java не поддерживает множественное наследование классов. Благодаря наследованию от java.lang.Enum, все перечисления имеют методы:
values возвращает список всех элементов enum-класса., valueof возвращает элемент перечисления,ordinal порядковый номер
Конструктор — это специальный метод, который вызывается при создании нового объекта. Конструктор инициализирует объект непосредственно во время создания. Имя конструктора совпадает с именем класса, включая регистр, а по синтаксису конструктор похож на метод без возвращаемого значения. Конструктор по умолчанию не принимает никаких параметров
1. Передача параметров по ссылке или по значению? Как передаются объекты в метод?
2. Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода? Почему? А если передать примитив?
В джава в метод все передаётся по значению.Вне зависимости от того, что передаëшь, примитив или объект.
Но у примитива метод просто копирует значение в свою локальную переменную, изначальная переменная никак не меняется.
А если передать методу ссылку, то он еë тоже скопирует
И скопированная ссылка будет тоже указывать но тот же объект
И объект соответственно вне метода тоже меняется
В отличие от обычных статических методов, статические методы в интерфейсах не наследуются.
Это означает, что если вы хотите вызвать такой метод, вы должны вызвать его напрямую из интерфейса, а не из реализующего его класса.
Модификаторы доступа для абстрактных классов могут быть любыми. При этом, все методы, кроме абстрактных, должны иметь реализацию.
А вот в случае с интерфейсами модификаторы доступа могут быть только двух типов, public и private(последний — начиная с Java 9).
я проверил и уменя на private ругается
Модификатор 'private' здесь запрещен
Статические методы похожи на методы по умолчанию, за исключением того, что мы не можем переопределить их в классах, реализующих интерфейс.
Этот функционал помогает нам избежать нежелательных результатов, которые могут появиться в дочерних классах.
Нет, не может. Ключевое слово final означает, что класс на вершине иерархии, и у него не может быть наследников. А абстрактный класс без наследников — это сферический конь в вакууме, так как нельзя создать экземпляр abstract class. Таким образом, если класс одновременно abstract и final, то у него нет наследников и нельзя создать его экземпляр. Компилятор Java выдаст ошибку, если сделать класс одновременно abstract и final.
final
abstract class
abstract
Как написать валидный код, который скомпилируется, в котором вы имплементите интерфейс в класс и не реализуете в классе ни один из методов интерфейса, хотя все методы интерфейса абстрактные?
Сделать класс Абстрактным
Создать абстрактный метод ?
сделать конструктор private ?
public class AbstractNoWordAbstract {
privateAbstractNoWordAbstract() {
private
AbstractNoWordAbstract() {
}
String - это ссылочный тип, который при создании экземпляра записывает строку в свое поле charов value, которое имеет модификатор доспупа private и модификатор final, то есть объект однажды создается и больше не изменяется
Ключевое слово native применяется, чтобы указать, что метод реализован не в файле Java, а на другом языке программирования. Native методы использовались в прошлом. В текущих версиях Java это нужно реже. В настоящее время, native методы необходимы, когда:
Вы должны вызвать библиотеку из Java, которая написана на другом языке.
Вам нужен доступ к системным или аппаратным ресурсам, к которым можно получить доступ только используя другой язык (как правило, С). На самом деле, многие системные функции, которые взаимодействуют с реальным компьютером (например диски или сетевые данные) могут быть вызваны только native методом.
Недостатки использования библиотек native методов тоже значительны:
JNI/JNA могут дестабилизировать JVM, особенно если вы попытаетесь сделать что-то сложное. Если ваш native метод делает что-то неправильно, есть вероятность аварийного завершения JVM. Также, неприятные вещи могут произойти, если ваш native метод вызывается из нескольких нитей. И так далее.
Программу с native кодом сложнее дэбажить.
Native код требует отдельного построения фрэймворков, что может создать проблемы с переносом на другие платформы.
Тип данных int (Integer)
да может быть отрицательным
это стиль написания программ основанный на использовании в программе объектов и классов. Уменьшает избыточность кода. Улучшает читаемость кода. Проще в модификации.
Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.
это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании.
обычный полиморфизм
а параметрический это дженерики
нельзя менять модификатор
Причина, по которой производительность instanceof и getClass() == ... различна, заключается в том, что они выполняют разные вещи.
instanceof
getClass() == ...
instanceof проверяет, является ли ссылка объекта в левой части (LHS) экземпляром типа в правой части (RHS) или некоторым подтипом.
getClass() == ... проверяет, идентичны ли типы.
Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.
Класс не может иметь наследников;
Метод не может быть переопределен в классах наследниках;
Поле не может изменить свое значение после инициализации;
Параметры методов не могут изменять своё значение внутри метода;
Локальные переменные не могут быть изменены после присвоения им значения.
В языке программирования Java ключевым словом static помечают члены (поля или методы), которые принадлежат классу, а не экземпляру этого класса.
Это означает, что какое бы количество объектов вы не создали, всегда будет создан только один член, доступный для использования всеми экземплярами класса.
Ключевое слово static применимо к переменным, методам, блокам инициализации, импорту и вложенным классам (nested classes).
Zuletzt geändertvor 2 Jahren