SlideShare a Scribd company logo
1 of 39
ООП полиморфизм
Виталий Унгурян
unguryan@itstep.org
Полиморфизм
Слово «полиморфизм»
греческого происхождения и
означает
«Имеющий много форм»
Полиморфизм определения
1.Способность объектов одного
типа вести себя подобно
объектам другого типа.
2.Способность функции
обрабатывать данные разных
типов.
Полиморфизм определения
3. Возможность работать с несколькими
типами так, как будто это один и тот же
тип.
4. Возможность применения
одноимённых методов с одинаковыми
или различными наборами параметров
в одном классе или в группе классов,
связанных отношением наследования.
Фигура
Квадрат
Треугол
ьник
Круг
Полиморфизм фигур
Полиморфизм фигур
Shape s = new Circle();
Динамический полиморфизм
В Java выполняется вызов метода
данного объекта с учётом того, что
объект может быть не того же класса,
что и ссылка, указывающая на него. Т.е.
выполняется вызов метода того класса,
к которому реально относится объект.
Динамический полиморфизм
Динамический полиморфизм
методов так же называют
поздним связыванием (dynamic
binding, late binding, run-time
binding).
Абстрактный класс
Абстрактный класс – это класс,
экземпляр которого невозможно
создать.
Такой класс может только служить
базовым классом при наследовании.
Абстрактный класс
Нельзя объявлять абстрактные
конструкторы или абстрактные
статические методы.
Некоторые или все члены этого класса
могут оставаться нереализованными, их
реализацию должен обеспечить класс
потомок.
Абстрактный класс
Абстрактный класс может содержать
абстрактные методы.
Абстрактный класс - abstract
public abstract class Animal(){
String getName() {
return name;
}
}
Абстрактные методы
Абстрактным называется метод,
который не имеет реализации в данном
классе. После круглых скобок, где
перечислены его аргументы, ставится
не открывающая фигурная скобка,
чтобы начать блок описания метода, а
точка с запятой. Тело метода
отсутствует.
Абстрактные методы
Перед именем метода
указывается модификатор
abstract.
Абстрактный метод.
public abstract class Animal(){
String getName() {
return name;
}
abstract void sound();
}
Пример
class A {
void m1(A a) {
System.out.print("A");
}
}
class B extends A {
void m1(B b) {
System.out.print("B");
}
}
class C extends B {
void m1(B c) {
System.out.print("C");
}
}
class D {
public static void
main(String[] args) {
A c1 = new C();
c1.m1(new B());
}
}
Интерфейс
Интерфейс - это конструкция языка
программирования Java, в рамках
которой могут описываться только
абстрактные публичные (abstract public)
методы и статические и/или
константные свойства (final static).
Интерфейс
Интерфейс - это отделение
интерфейса класса от его реализации.
Мы можем разделить интерфейс класса на
три части:
 открытую (public) - видимую всем
клиентам;
 защищённую (protected) - видимую самому
классу, его подклассам и друзьям (friends);
 закрытую (private) - видимую только
самому классу и его друзьям.
Интерфейс
public interface Sounding
{
public void sound();
}
Реализация интерфейса
Каждый класс в Java может
реализовать любой набор
интерфейсов.
public class Triangle implements Drawable,
Colorable {
}
Полиморфизм интерфейсов
Интерфейсы описывают методы,
которые должны быть реализованы в
классе, и типы параметров, которые
должен получать и возвращать каждый
член класса, но не содержат
определенной реализации методов,
оставляя это реализующему интерфейс
классу.
Полиморфизм интерфейсов
Интерфейсы находятся вне иерархии
наследования классов, поэтому они
исключают определение метода или
набора методов из иерархии
наследования.
Интерфейс как решение
множественного наследования.
В отличие от C++, Java не позволяет
наследовать больше одного класса.
В качестве альтернативы
множественному наследованию
существуют интерфейсы.
Расширение интерфейса другими
интерфейсами.
public interface Drawable extends
Colorable, Resizable {
}
Интерфейсы и переменные
public interface Directions
{
int RIGHT=1;
int LEFT=2;
int UP=3;
int DOWN=4;
}
Реализация интерфейса
interface Sounding {
public String sound();
}
public class Cat implements Sounding
{
public String sound() {
return “Мяу”
}
}
Полиморфизм наследования
При наследовании класс получает все
методы, свойства и события базового
класса такими, какими они реализованы в
базовом классе. При необходимости в
наследуемых классах можно определять
дополнительные члены или
переопределять члены, доставшиеся от
базового класса, чтобы реализовать их
иначе. Наследуемый класс также может
реализовывать интерфейсы.
Полиморфизм методов
Способность классов поддерживать
различные реализации методов с
одинаковыми именами. Право выбора
специфической версии метода
предоставлено компилятору.
Отдельным вариантом полиморфизма
методов является полиморфизм
методов с переменным числом
аргументов
Перегрузка методов
Переопределение методов
(Overloading) — один из способов
поддержки полиморфизма в Java.
class Cat {
void sound(String string)
void sound(int value)
}
Позднее связывание
Способность Java делать выбор
метода, исходя из типа объекта
во время вы- полнения,
называется поздним
связыванием.
Полиморфизм через динамическое
определение типов (RTTI)
Java позволяет узнать точный тип
объекта, когда у вас есть ссылка только
на базовый тип. Для этого в Java
встроено безопасное преобразование
типов (type-safe downcast).
Синтаксис безопасного преобразования
типов:
Cat myCat = (Cat) myAnimal;
Полиморфизм через переопределение
методов
Если перегруженные методы с
одинаковыми именами находятся в одном
классе, списки параметров должны
отличаться. Но если метод подкласса
совпадает с методом суперкласса, то
метод подкласса переопределяет метод
суперкласса. Совпадать при этом должны
и имена методов и типы входных и
выходных параметров
Перегрузка и переопределение
Полиморфизм представлений
Частичное решение проблемы
полиморфизма представлений, в java
решается с помощью "копирующих"
конструкторов, создающие новый
экземпляр коллекции из элементов
существующего набора, быть может,
отличающегося реализацией.
Статический метод класса
Статическим методом называется
фрагмент программы, которому
присвоено некоторое уникальное имя, и
который по этому имени можно
вызывать из остальных частей
программы.
Math.cos()
Отличие статического и обычного
метода класса
Статические методы отмечаются
модификатором static.
В статическом методе нельзя использовать
нестатические свойства и методы класса.
Статический метод можно вызвать без
создания экземпляра класса (если он имеет
модификатор доступа public)
Модификатор strictfp
Ключевое слово strictfp появилось в
Java 2 и связано с вычислениями с
плавающей точкой. Модифицируя
класс, метод, интерфейс с ключевым
словом strictfp, вы гарантируете, что
вычисления с плавающей точкой будут
выполняться как в старых версиях Java.
Для Android это не актуально. Вам не
придётся иметь с ним дело.

More Related Content

What's hot

Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыUnguryan Vitaliy
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Unguryan Vitaliy
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью. Unguryan Vitaliy
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#bolevik
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировкиUnguryan Vitaliy
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Unguryan Vitaliy
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Unguryan Vitaliy
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииUnguryan Vitaliy
 

What's hot (15)

java 8
java 8java 8
java 8
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
 
Stream API
Stream APIStream API
Stream API
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 

Viewers also liked

Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылокUnguryan Vitaliy
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.Unguryan Vitaliy
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Unguryan Vitaliy
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAbhishek Asthana
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьUnguryan Vitaliy
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Unguryan Vitaliy
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Unguryan Vitaliy
 

Viewers also liked (9)

Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
 
Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in Java
 
List - списки
List - списки List - списки
List - списки
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 

Similar to Java. Полиморфизм.

Msu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And UmlMsu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And Umlolegol
 
03 ООП и UML
03 ООП и UML03 ООП и UML
03 ООП и UMLphearnot
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
02 - Классы и Объекты
02 - Классы и Объекты02 - Классы и Объекты
02 - Классы и Объектыphearnot
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2Technopark
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objectsolegol
 
основы ооп
основы оопосновы ооп
основы оопDmitry Savin
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLcolriot
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.genericsmuqaddas_m
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыSergey Nemchinsky
 
принципы объектного подхода
принципы объектного подходапринципы объектного подхода
принципы объектного подходаAndrey Radionov
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 

Similar to Java. Полиморфизм. (20)

Msu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And UmlMsu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And Uml
 
Step 3.1
Step 3.1Step 3.1
Step 3.1
 
03 ООП и UML
03 ООП и UML03 ООП и UML
03 ООП и UML
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
02 - Классы и Объекты
02 - Классы и Объекты02 - Классы и Объекты
02 - Классы и Объекты
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
Lec 2
Lec 2Lec 2
Lec 2
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objects
 
основы ооп
основы оопосновы ооп
основы ооп
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UML
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 
принципы объектного подхода
принципы объектного подходапринципы объектного подхода
принципы объектного подхода
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Java. Classes.
Java. Classes.Java. Classes.
Java. Classes.
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 

More from Unguryan Vitaliy

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование. Unguryan Vitaliy
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектамиUnguryan Vitaliy
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoFUnguryan Vitaliy
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в SpringUnguryan Vitaliy
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействиеUnguryan Vitaliy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в javaUnguryan Vitaliy
 

More from Unguryan Vitaliy (20)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
JSTL
JSTLJSTL
JSTL
 
JSP
JSPJSP
JSP
 
JDBC
JDBCJDBC
JDBC
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
XML
XMLXML
XML
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в java
 

Java. Полиморфизм.