Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2017, 06:41   #1
Sr233
 
Регистрация: 30.05.2017
Сообщений: 5
Сообщение Зачем нужен полиморфизм?

Всем здравствуйте, дорогие форумчане!
Хочу узнать у вас, зачем на самом деле нужен полиморфизм?

Начнем с начала: ссылочный тип определяет доступность данных, а объект определяет какой вариант будет запускаться.
Внимание вопрос: Какая разница между "object ob = new Animal()" и "Animal ob = new Animal" если вызов переопределенного метода определяется типом объекта и вызывается нужный вариант, и обратиться к данным суперкласса можно посредством оператора "super"?

Я не могу понять, все никак не могу разобраться ЗАЧЕМ, ведь реализацию можно сделать просто обращаясь к переменным супер класса!

Помогите разобраться, спасибо за ранее!)
Sr233 вне форума Ответить с цитированием
Старый 30.05.2017, 07:58   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что так можно делать не только с локальной переменной, в которую присваивается только что созданный объект, но и например с параметрами функции.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.05.2017, 08:48   #3
Sr233
 
Регистрация: 30.05.2017
Сообщений: 5
Сообщение

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Потому что так можно делать не только с локальной переменной, в которую присваивается только что созданный объект, но и например с параметрами функции.
Приведите, пожалуйста, пример. Спасибо!

Последний раз редактировалось Sr233; 30.05.2017 в 08:51.
Sr233 вне форума Ответить с цитированием
Старый 30.05.2017, 09:26   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так их же полно даже в стандартной библиотеке.
OutputStream какой-нибудь или System.out.print: туда можно передать любой Object (и он вызовет toString) без необходимости создавать новую функцию print для каждого класса.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.05.2017, 08:56   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

...ну в целом - вы определяете какой-то "внешний вид" (базовый класс, интерфейс), который все остальные части программы будут видеть и использовать. А что реально происходит там - скрыто, например Animal.run - все животные бегают, но анимация человека и медведя разная. С другой стороны, отрисовщику экрана не важно - человек или медведь, он просто делает всем "run", а путем полиморфизма, каждый конкретный объект, уже сам показывает свою анимацию.
alexzk вне форума Ответить с цитированием
Старый 02.06.2017, 17:22   #6
Sr233
 
Регистрация: 30.05.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
...ну в целом - вы определяете какой-то "внешний вид" (базовый класс, интерфейс), который все остальные части программы будут видеть и использовать. А что реально происходит там - скрыто, например Animal.run - все животные бегают, но анимация человека и медведя разная. С другой стороны, отрисовщику экрана не важно - человек или медведь, он просто делает всем "run", а путем полиморфизма, каждый конкретный объект, уже сам показывает свою анимацию.
Т.е. смысл полиморфизма в том, чтобы можно было обращаться с объектами подкласса как с одним объектом? Если так, ТО ЗАЧЕМ? и объясните почему это зачем нужно.
Sr233 вне форума Ответить с цитированием
Старый 02.06.2017, 17:34   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не знаю что такое "как с одним объектом", но я ж написал уже зачем. Что именно непонятно в этих примерах?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.06.2017, 19:14   #8
Sr233
 
Регистрация: 30.05.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не знаю что такое "как с одним объектом", но я ж написал уже зачем. Что именно непонятно в этих примерах?
Я может тупой, так не понимаю.
Для чего конкретно предназначен полиморфизм? Чтобы имя было одно и не нужно было путаться в именах методах?

Все дело в том что можно реализовать код без полиморфизма, но тогда получается больше кода (говорят мне и программисты, и гугл) но я никак не могу найти пример измененного кода и наглядно увидеть, как именно, реализуется полиморфизм. Если вы можете, скажите где найти такой пример, или купить его (ей богу)
И в чем реальная изюминка полиморфизма??

Спасибо что отвечаете.
Sr233 вне форума Ответить с цитированием
Старый 02.06.2017, 19:24   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так я ж говорю, посмотрите например на стандартные классы/методы Java, которые вы все время используете.
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
OutputStream какой-нибудь или System.out.print: туда можно передать любой Object (и он вызовет toString) без необходимости создавать новую функцию print для каждого класса.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.06.2017, 19:53   #10
Sr233
 
Регистрация: 30.05.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так я ж говорю, посмотрите например на стандартные классы/методы Java, которые вы все время используете.
Что я там вижу, так это то что метод print(); вызывается в соответствии с переданными аргументами. Как если бы это была перегрузка.
Sr233 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зачем нужен конструктор? Мой повелитель Общие вопросы C/C++ 9 21.04.2016 10:29
Зачем нужен Chr(34)??? RISagitov Microsoft Office Excel 1 07.08.2012 20:43
зачем нужен IdAntiFreeze1? cargo29 Компоненты Delphi 8 05.03.2012 11:40
Зачем нужен static Kasper1 Общие вопросы C/C++ 5 21.12.2010 01:53
Зачем нужен finally? ds.Dante Общие вопросы .NET 9 15.09.2009 12:09