Полиморфизм java
Автор Sooqua задал вопрос в разделе Другие языки и технологии
ООП: что такое инкапсуляция, абстракция, полиморфизм и наследование? и получил лучший ответ
Ответ от Jurijus Zaksas[гуру]
инкапсуляция - включение в класс данных (или других классов) с ограничением доступа к ним. Например, класс "ведро" может инкапсулировать в себе класс "мусор" и предоставлять методы "добавить мусора" и "опустошить ведро", но не давать никому трогать сам "мусор".
абстракция - представление объекта реального мира в виде абстракции, урезанной до его функциональности в некотором контексте. Еще может иметься ввиду возможность определять заголовки методов без их реализации, но это вряд ли. Смотри пример с ведром. Если с точки зрения задачи мусор трогать нельзя, эта функция не реализуется.
полиморфизм - изменение/дополнение поведения класса-предка классами-потомками. Например, класс "ведро" имеет виртуальный метод "опустошить ведро", вызывающий приватный метод "перевернуть ведро". А класс "ведро с крышкой" - наследник класса "ведро" - может переопределить метод "опустошить ведро": сначала вызвать приватный метод "открыть крышку", потом - метод предка "опустошить ведро", потом - приватный метод "закрыть крышку".
наследование - наследование это наследование. Наследование потомками методов предков. Класс "ведро с крышкой" - наследник класса "ведро" - унаследует все его защищенные и публичные методы, например "добавить мусора" и "опустошить ведро".
Разжеванней, чем в вики? Это как?
На пальцах - могу: инкапсуляция - не пускаем пользователя (т. е. другого программиста) к данным мимо наших функций; абстракция - представляем объект в виде некоторой урезанной по предметной области модели (неожиданно, да?) ; наследование - потомки сохраняют функциональность родителей; полиморфизм - конкретная функция определяется по типу объекта во время работы программы.
Что непонятно?
Инкапсуляция - это скрытие реализации для пользователя. Наведу пример автомобиля. В автомобиле есть коробка передач, есть система управления и т. д. Эти элементы взаимодействуют с внутренними элементами, но для того чтобы тебе ехать, не обязательно знать как там все работает, тебе главное нажать на педали, включить передачу и ехать, а вот как оно все работает уже скрыто от тебя. вот это и есть ИНКАПСУЛЯЦИЯ, тоесть скрытие как работает автомобиль (скрытие реализации).
Абстракция - это такое понятие которое как бы разделяет физическое состояние от так сказать вымешленного.
Например у тебя есть идея создать какой нибудь объект. Ты на листе рисуешь его составные, придумываешь как они будут взаимодействовать между собой, придумываешь какие действия будут от пользователя скрыты, тоесть инкапсулируешь их. тоесть ты создаешь абстракцию своей идеи, своего объекта, тоесть он еще не является физическим а только вымешленным. Вот приблизительно что такое абстракция.
Наследованния - это такое явление которое расширяет объекты. НАпример тот же автомобиль. Компания создала автомобиль например BMW X7. но через год эта компания хочет создать похожую модель но добавить туда некоторые возможности. Да, они могут начать создание заново, но для этого у них уйдет много времени. Для того чтобы им это не делать, они просто берут эту же модель и добавляют ей необходимые функции. ТОесть новый автомобиль будет унаследовать все то что было и у предшественника+со своими возможностями. Также само посмотреть с урока биология. есть класс ЖИВОТНЫЕ - это как бы общее понятие всех животных (все животные могут есть, пить, размножатся). Ниже по иерархии стоит например класс Собачьи которые расширяют какбы класс животные. они могут есть, пить, размножатся как и все животные, приэтом собаки могут еще и лаять, что не все могут животные.. ТОесть собачьи класс унаследован (расширен) от класса Животные.
Полиморфизм - это так называемый принцип в котором при одной какой то форме действий могут выполнятся различные реализации. Например в том же автомобиле. У всех есть педали (газ, тормоз, сцепление). Как бы у всех машин есть единый интерфейс, тоесть когда жмешь газ - машина едет, когда тормоз тормозит. Но в разных машинах при нажатии на одну и ту же педаль выполняются разные реализации. Одна набирает скорость быстрей, одна тормозит быстрей. Тоесть ПОлиморфизм - это один интерфейс, много действий (реализаций)
Все эти 4 принципа ООП, применяются в программировании и есть очень полезными и удобными.
на сколько я знаю инкапсуляция это вид доступа к переменной свойству или методу
Инкапсуляция - это когда у содержимого класса зона видимости (public, private, ..) объявлена как private и не видна извне. Такое делают для того чтобы реализовать функциональность самого класса, а public члены нужны для доступа к классу из других классов. Просто так удобнее сопровождать код, он не завязан узлом.
Абстракция, полиморфизм - это значит что разные классы могут иметь один и тот же набор публичных методов. Обычно это реализуется путём создания интерфейса (простейшее описание перечня методов). Дальше этот интерфейс добавляется ко всем классам. И в последствии получается что любой класс от части является и этим интерфейсом. Вы сможете любой класс привести к типу данных = интерфейсу, и соответственно разные классы с разным содержимым будут вести себя как один и тот же тип данных. Разные классы можно скормить методу принимающему на вход класс только одного типа. Лишь бы этот тип был реализован во всех разнородных классах.
При наследовании функциональность класса расширяется. Можно класс унаследовать от интерфейса, можно от любого другого объекта. В C++ поддерживается наследование от 2 классов сразу! А в C# только от одного класса и любого кол-ва интерфейсов. Класс всегда можно рассматривать как базовый. Ну к примеру, вы узнали о существовании абстрактного класса Stream. И знаете что много процедур принимают объект типа Stream. У вас появляется идея как осуществить вызов такого метода передав в него свои уникальные данные. Просто написать нового наследника от класса Stream и переопределить в нём все методы. Получаем некий новый класс MyStream, который также легко приводится к базовому типу Stream. Ну примерно также как int легко приводится к long. Процедура получает экземпляр класса MyStream но она к нему относится так будто это Stream. Не учитывает ваши доработки. А вы в свою очередь позаботились чтобы ваш MyStream чётко соответствовал идеологии Stream.
Идеология ООП выходит очень далеко за понятие самой теории ООП. Примерно также как русский язык не описывает всего многообразия мыслей, не передаёт смысла будущих текстов.
На ООП существует много паттернов, их можно не любить но применяют их постоянно.
Рано или поздно вы спросите у друга программиста "а как мне сделать ..." и он вам сообщит некое сочетание приёмов программирования базирующееся на классах.
ООП плохо реализовано во всех скриптовых языках, так как там типизация не строгая.
ходи на занятия
что такое полиморфизм?
Полиморфизм в биологии
Википедия
Полиморфизм - в биологии (от др. -греч.
подробнее...
почему java хуже c++?
Java считается самым востребованным языком. Следом идет Си, потом C# и потом только С++.
Так
подробнее...
Расскажите, для чего вобще нужны Виртуальные методы?
Читай:
Виртуальный метод (виртуальная функция) — в объектно-ориентированном
подробнее...
Объектно ориентированное программирование. (ООП)
Так никто нормально и не ответил!
Три признака ООП: инкапсуляция, наследование и полиморфизм.
подробнее...
Какой язык программирования лучше?
Сейчас больше количество прикладных программ работают в связке с вэбом. Для новичка я бы не
подробнее...
Структурный и объектный подходы. совместное использование?
Не смущайтесь, вы делаете всё правильно.
Диаграммы Гейна-Сарсона (потоки данных) могут
подробнее...
Недавно услышал про такой язык как F#, что это за язык, и есть ли отличия от С++?
Код на языке F# является безопасным в отношении типов, часто бывает более компактным, чем
подробнее...
Что значит интерпретируемый объектно-ориентированный язык программирования?
Языки бывают компилируемые и интерпретируемые. Компиляция предполагает преобразование программы в
подробнее...
Чем отличается C# от С и C++
В С нет никаких классов и шаблонов
C++ наследует С с добавкой классов и шаблонов и вообще
подробнее...