Файл: Ревю по 3 модулю 1 что такое ооп.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 29.03.2024

Просмотров: 25

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Ревю по 3 модулю

1) что такое ООП.

2) принципы ООП

3) Модификаторы доступа

4) Указатели this и super.

5) Модификатор static

6) Наследование и реализация.

7) Интерфейсы.

8) Анонимные классы.

9) Класс Object и класс Class.

10) Контракт между  equals() и hashCode().

Что такое ООП? В чем его плюсы?
это способ(метод) программирования, основанный на представлении программы в виде совокупности объектов, каждый из которых является экземпляром отдельного класса, а классы образуют иерархию наследования
Основные принципы ООП:

Абстракция - выделение наиболее важных характеристик и информации об объекте.

Инкапсуляция - это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании.
Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Что такое полиморфизм? Приведите пример полиморфизма?

1. это возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных наследованием

2. это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта

Что такое Наследование, композиция, агрегирование
Наследование -свойство системы позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью (extends, полиморфизм)



Что такое инкапсуляция? Приведите пример инкапсуляции?
это механизм обертывания данных (поля) и методов в одно целое, в классы инкапсуляции переменные класса будут сокрыты от других классов. доступ же к ним будет через методы этого класса (гетеры и сеттеры)

разберитесь обязательно чем отличается параметрический полиморфизм от ad-hoc.

Ad hoc полиморфизм — несколько объявлений функции с одинаковым именем но с отличающимися параметрами, пример:

function test (string $a, string $b)

{ return $a . $b; }


function test (int $a, int $b)

{ return $a + $b; }

Параметрический полиморфизм — когда будет выполнятся одна и та же функция вне зависимости от типов аргументов.

function test (string $a, string $b)

{ return $a . $b; }

function test (int $a, int $b)

{ return $a + $b; }

Конструкторы

Может ли быть конструктор у абстрактного класса?
Да, в абстрактном классе в Java можно объявить и определить конструкторы. Поскольку создавать экземпляры абстрактных классов нельзя, вызвать такой конструктор можно только при формировании цепочки конструкторов, то есть при создании экземпляра конкретного класса-реализации.

Будет ли в классе конструктор и какой, если при его создании ни один не был задан?
Будет конструктор по умолчанию, даже если его не написать, компилятор сам создаст конструктор по умолчанию

Зачем this в конструкторе абстрактного класса?
Абстрактный клас может расширяться неабстрактным классом, который унаследует его методы и свойства. И вот тогда пригодится конструктор.

Будет ли создан автоматически конструктор по-умолчанию, если в созданном классе есть любой другой конструктор?

Нет! Если класс содержит реализацию хотя бы одного конструктора с параметрами, то, чтобы объявить конструктор по умолчанию, его нужно объявлять в классе явным образом.

Можно ли в классе вызвать один конструктор из другого? Как это сделать?
Можно. При помощи ключевого слова this() в скобках указываются параметры вызывающего конструктора. Также можно вызвать конструктор родительского класса при помощи super()

ENUM

Перечислите методы именно класса Enum?
методы:- ordinal() - индекс

константы- values() - массив констант-

valueOf() - возвращает элемент перечисления с названием в скобках

name()

Метод values()-Автоматически предопределённый метод для перечисления values() возвращает массив, содержащий список констант перечисления.



Метод valueOf(String string)-Автоматически предопределённый метод для перечисления valueOf() возвращает константу перечисления, значение которой соответствует строке, переданной в параметре.



Метод ordinal()-У перечислений есть несколько удобных методов. Например, вы можете получить значение, которое указывает позицию константы в списке констант перечисления (порядковое значение или ordinal value), с помощью метода ordinal(). Порядковые значения начинаются с нуля.

Методы compareTo() и equals()-Также можно сравнивать порядковые значения констант одного и того же перечисления с помощью метода
compareTo(). Или сравнить на эквивалентность через метод equals().
Может ли Enum имплементировать интерфейсы?

Да, Enum может наследовать интерфейсы. Поскольку Enum тип схож с классом и интерфейсом, он может наследовать интерфейс. Это даёт поразительную гибкость в использовании Enum в качестве специальной реализации в некоторых случаях.

Может ли Enum наследовать (extends) класс? Почему?

Поскольку Enum уже наследуется от абстрактного класса java.lang.Enum, понятно, что другой класс наследовать не удастся, поскольку Java не поддерживает множественное наследование классов. Благодаря наследованию от java.lang.Enum, все перечисления имеют методы

:- ordinal() - индекс константы

- values() - массив констант

- valueOf() - возвращает элемент перечисления с названием в скобках

Память

В какой области памяти хранятся примитивы?

хранятся в стэке

В какой области памяти хранятся объекты?

в куче HEAP
Где хранятся ссылки на объект?

хранятся в стэке.

Интерфейсы

Синтаксические отличия интерфейса от абстрактного класса (АК)? 5 отличий

1/Интерфейс описывает только поведение. У него нет состояния. А у абстрактного класса состояние есть: он описывает и то, и другое.

2)Абстрактный класс связывает между собой и объединяет классы, имеющие очень близкую связь. В то же время, один и тот же интерфейс могут реализовать классы, у которых вообще нет ничего общего.

3)Классы могут реализовывать сколько угодно интерфейсов, но наследоваться можно только от одного класса.

Можно ли создать поля в интерфейсе?

Интерфейс может содержать поля, но они автоматически являются статическими (static) и неизменными (final). Все методы и переменные неявно объявляются как public. Класс, который собирается использовать определённый интерфейс, использует ключевое слово implements.

Какие методы в интерфейсе могут иметь реализацию?

В JDK 8 была добавлена такая функциональность как методы по умолчанию. И теперь интерфейсы кроме определения методов могут иметь их реализацию по умолчанию, которая используется, если класс, реализующий данный интерфейс, не реализует метод.

сколько максимум можно имплементировать интерфейсов ? =)

65535
Что такое интерфейс? Когда использовать интерфейс?

Механизм наследования очень удобен, но он имеет свои ограничения. В частности мы можем наследовать только от одного класса, в отличие, например, от языка С++, где имеется множественное наследование.


В языке Java подобную проблему частично позволяют решить интерфейсы. Интерфейсы определяют некоторый функционал, не имеющий конкретной реализации, который затем реализуют классы, применяющие эти интерфейсы. И один класс может применить множество интерфейсов.

Какие модификаторы доступа можно использовать в интерфейсе и абстрактом классе?
Модификаторы доступа для абстрактных классов могут быть любыми
Можно ли создавать статик методы в интерфейсах?зачем статик методы в интерфейсе
Мы можем использовать статические методы интерфейса, чтобы не создавать вспомогательные классы, то есть переместить все статические методы в соответствующий интерфейс. Такой метод легко использовать и быстро находить.

Как написать валидный код, который скомпилируется, в котором вы имплементите интерфейс в класс и не реализуете в классе ни один из методов интерфейса, хотя все методы интерфейса абстрактные?
Просто объявить класс, который имплементит интерфейс, абстрактным.
NATIVE

ключевое слово NATIVE

Если в процессе реализации Jаvа-проекта возникает необходимость в применении существующего кода, написанного на другом языке программирования, или использовании низкоуровневых функций для непосредственного обращения к компьютерной аппаратуре, существует возможность прибегнуть к так называемым методам native, которые могут быть вызваны из среды приложения Java, но создаются на одном из "родственных" (native) языков – как правило, С или С++. Nаtivе-методы объявляются посредством модификатора native. Тело метода реализуется на другом языке и поэтому в объявлении заменяется символом точки с запятой. Ниже в качестве примера приведено объявление метода, который обращается к операционной системе за информацией об идентификационном номере процессора хост-компьютера.

Что такое нативные методы, их плюсы и минусы

методы написанные на других языках.

Минусы: При обращении к методам native свойства переносимости и безопасности, присущие коду Java, будут утрачены.

Плюсы: закрывает потребности: использование низкоуровневых функций для обращения к аппаратуре( к памяти ) выполнить какие то задачи, которые проще выполнить на низкоуровневом языке

МЕТОДЫ

Что можно делать при переопределении метода, а что нельзя?


У переопределенного метода должны быть те же аргументы, что и у метода родителя.

У переопределенного метода должен быть тот же тип возвращаемого значения, что и у метода родителя.

Модификатор доступа у переопределенного метода также не может отличаться от «оригинального»:

Можно ли использовать статические методы в обычных? Наоборот? Почему?
Статический метод можно использовать в обычном а обычный метод в статическом использовать нельзя не имея ссылки на конкретный экземпляр класса
Переопределение метода.
Изменение реализации уже существующего в суперклассе метода (override). В новом методе должны быть те же сигнатура и тип возвращаемого результата, что и у метода родительского класса

Ковариантность типа возвращаемого значения?

То, что позволяет типу возвращаемого значения быть подтипом типа переопределенного метода
Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода? Почему? А если передать примитив?
массив - это объект, находящийся в куче(она же хип), который может хранить данные, например примитивы. Передавая массив(объект) в метод, мы получаем копию ссылки, по ссылке мы можем изменить состояние объекта в хипе, но не можем поменять саму ссылку. При передаче в метод примитива, у нас создаётся копия, ты можешь крутить и менять её значение внутри метода как угодно, но на само значение это никак ни повлияет.
Указатели this и super.

Похожи:

1. this и super - это нестатические переменные их нельзя использовать в статическом контексте.

2. this и super могут использоваться внутри конструкторов для вызова других конструкторов по цепочке

3. Внутри конструктора this и super должны стоять выше всех других выражений, в начале

Отличия:

1.Переменная this ссылается на текущий экземпляр класса, в котором они используются. super на текущий экземпляр родительского класса

2. Каждый конструктор при отсутствии явных вызовов других конструкторов, неявно вызывается с помощью super().

Могут ли нестатические методы перегрузить статические?

Перегружать можно, переопределять нет. В случае со статическими методами это не переопределение (overriding), а сокрытие (hiding).

Статические методы принадлежат классу, а не экземпляру класса. Какой метод вызовется определяется на этапе компиляции, а не по ходу выполнения программы. Поэтому когда вы "переопределяете" статический метод, на самом деле вы создаете новый. По коду выше видно