ООП JAVA

Ace your homework & exams now with Quizwiz!

Абстрактный класс

Абстрактный класс похож на обычный класс. В абстрактном классе также можно определить поля и методы, но в то же время нельзя создать объект или экземпляр абстрактного класса. Абстрактные классы призваны предоставлять базовый функционал для классов-наследников. А производные классы уже реализуют этот функционал. При определении абстрактных классов используется ключевое слово abstract: Но главное отличие состоит в том, что мы не можем использовать конструктор абстрактного класса для создания его объекта. Кроме обычных методов абстрактный класс может содержать абстрактные методы. Такие методы определяются с помощью ключевого слова abstract и не имеют никакой реализации: Производный класс обязан переопределить и реализовать все абстрактные методы, которые имеются в базовом абстрактном классе. Также следует учитывать, что если класс имеет хотя бы один абстрактный метод, то данный класс должен быть определен как абстрактный.

Что такое абстракция?

Абстракция - означает выделение значимой информации и исключение из рассмотрения незначимой. С точки зрения программирования это правильное разделение программы на объекты. Абстракция позволяет отобрать главные характеристики и опустить второстепенные. Пример: описание должностей в компании. Здесь название должности значимая информация, а описание обязанностей у каждой должности это второстепенная информация. К примеру главной характеристикой для "директор" будет то, что это должность чем-то управляет, а чем именно (директор по персоналу, финансовый директор, исполнительный директор) это уже второстепенная информация.

Что такое инкапсуляция?

В объект объединяются и данные и методы, которые работают с этими данными. (Объединение в один класс). Сокрытые внутренней структуры объекта от внешнего мира. И обращение к данным, только через методы самого объекта. К состоянию объекта может обращаться только сам объект. При использовании объектно-ориентированного подхода не принято применять прямой доступ к свойствам какого-либо класса из методов других классов. Для доступа к свойствам класса принято задействовать специальные методы этого класса для получения и изменения его свойств. Переменные класс будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса (скрытие данных). Применение инкапсуляции: · Модификаторы доступа. (public, private, protected, default) · Геттеры и Сеттеры.

Переопределение метода

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

Интерфейс

Интерфейсы определяют некоторый функционал, не имеющий конкретной реализации, который затем реализуют классы, применяющие эти интерфейсы. И один класс может применить множество интерфейсов. Интерфейс может определять константы и методы, которые могут иметь, а могут и не иметь реализации. Методы без реализации похожи на абстрактные методы абстрактных классов. Все методы интерфейса не имеют модификаторов доступа, но фактически по умолчанию доступ public, так как цель интерфейса - определение функционала для реализации его классом. Поэтому весь функционал должен быть открыт для реализации. Интерфейсы используются для того, чтобы мы были уверена, что у каких-то классов используются определенные методы. Метод интерфейса не имеет тело метода и всегда по умолчанию является public. Интерфейс не задаёт реализацию, он задаёт каркас. Если класс реализует интерфейс(implements), то он обязан реализовать все методы этого интерфейса. Или класс должен быть объявлен абстрактным. Или если метод в интерфейсе объявлен как static, то он должен иметь тело метода. Если, например, суперкласс реализовал интерфейс, то методы этого интерфейса будут доступны для потомков этого класса.

Что такое конструктор?

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

Перегрузка метода

Метод с одним и тем же именем, но с разными типами и/или количеством параметров.

Модификаторы доступы. Сеттера и Геттеры

Модификаторы доступа - специальные слова, которые показывают, кому нельзя, а кому можно пользоваться данными. · Public - полный доступ к сущности (полю или методу класса) из любого пакета. · Protected - доступ к сущности только для классов своего пакета и наследников класса. · Default - доступ только для классов своего пакета. · Private - доступ только внутри класса, в котором объявлена сущность. Геттер - метод, с помощью которого мы получаем значение переменной. Сеттер - метод, с помощью которого мы меняем, или задаём значение переменной.

О чем говорит ключевое слово final?

Может быть применено к полям, методам или классам. В зависимости к какой сущности приложено данное ключевое слово - будет и различный смысл в его применении. Для класса. Класс помеченный при помощи final не может иметь наследников. Для метода. Метод помеченный при помощи final не может быть переопределен в классах наследниках. Для поля. Поле помеченное при помощи слова final не может изменить свое значение после инициализации (инициализируется либо при описании, либо в конструкторе, статическом или динамическом блоке). Значение локальных переменных, а так же параметров метода помеченных при помощи слова final не могут быть изменены после присвоения.

Можно ли создать 2 метода с одинаковым именем и разным возвращаемым типом?

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

Что такое наследование?

Наследование — это процесс, благодаря которому один объект может приобрести свойства другого объекта (наследование всех свойств одного объекта другим) и добавлять черты характерные только для него самого. Позволяет повторно использовать код одного класса в другом классе. Подкласс не наследует закрытые члены родительского класса (private). Все классы, суперкласс у который явно не указан, наследуются от класса Object.

Что такое ООП?

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

Что такое объект?

Объект - модель реальной сущности, которой присвоено имя и обладающая конкретными значениями свойств и проявляющая свое поведение, обладающий именем набор данных (полей и свойств объекта), физически находящихся в памяти компьютера, и методов, имеющих доступ к ним. Объект - конкретный экземпляр класса.

Что такое полиморфизм в Java?

Способность методов обрабатывать данные разных типов. Возможность передавать в методы разные типы, если у них есть общий родитель. Преимущества: код меньше и возможность использовать код много раз. Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. Переменной типа суперкласса можно присвоить объект подкласса. То есть к объекту подкласса, мы может обращаться через переменную суперкласса. Поскольку Java относится к строго типизированным языкам, в программном коде всегда нужно указать тип объекта при объявлении переменных. Строгая типизация повышает безопасность кода, и надежность программы и позволяет еще на стадии компиляции предотвратить ошибки несовместимости типов (например, попытку разделить строку на число). Мы объявили переменную типа суперкласса, а присвоили ей значение одного из наследников. Компилятор не будет «ругаться» на несоответствие типов, потому что тут работает восходящее преобразование типов — ссылка на объект интерпретируется, как ссылка на базовый класс. Причем компилятор, встретив в коде такую конструкцию, делает это автоматически и неявно. Если метод принимает в качестве параметра какой-либо объект интерфейсного типа, то при вызове этого метода в зависимости от конкретной реализации метод может вести себя по-разному. Каким образом происходит выбор нужной реализации метода при выполнении программы? Чтобы ответить на эти вопросы необходимо рассказать о позднем (динамическом) связывании. Под связыванием понимают установление связи между вызовом метода и его конкретной реализацией, в классах. Это определится только при выполнении программы благодаря механизму динамической диспетчеризации — проверки типа объекта во время выполнения программы и выбора нужной реализации метода для этого типа. Если вас спросят, как это реализовано, можете ответить, что при загрузке и инициализации объектов JVM строит таблицы в памяти, и в них связывает переменные с их значениями, а объекты — с их методами. Причем если объект наследуется или имплементирует интерфейс, в первую очередь проверяется наличие переопределенных методов в его классе. Если таковые есть, они привязываются к этому типу, если нет - ищется метод, определенный в классе на ступень выше (в родителе) и так вплоть до корня при многоуровневой иерархии.


Related study sets

Network+ Chapter 7: Virtualization and Cloud Computing

View Set

Economics Module 3: Applications of Supply and Demand

View Set

Chapter 18: Planning Nursing Care

View Set

Virginia DMV Practice Test, Learners Permit, Questions to Review, 2021

View Set

Chapter 27: Safety, Security, and Emergency Preparedness - PrepU

View Set