• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Помогите с полиморфизмом

  • Автор темы Sr233
  • Дата начала
S

Sr233

Всем здравствуйте.
Застрял на полиморфизме.

Объясните пожалуйста такую вещь: 1. Какая разница между Object a = new Animal и Animal a = new Animal.
2. Зачем делать переопределенный метод, если можно создать метод под другим именем и пользоваться переменными через оператор super? Пример на картинках.
3. Все говорят что парадигма полиморфизма делает код короче, как короче? И приведите пример.

Прошу, помогите разобраться, я застрял на этом гребаном полиморфизме.
 

Вложения

  • 10.JPG
    10.JPG
    5,9 КБ · Просмотры: 701
  • 20.JPG
    20.JPG
    6,5 КБ · Просмотры: 281
X

X-Shar

1. Какая разница между Object a = new Animal и Animal a = new Animal.

Object a = new Animal - Вы создаёте объект класса Animal, который наследуется от Object, причём написали неправильно, нужно так Object *a = new Animal, т.е. это указатель на память...

Animal a = new Animal вы просто создаёте объект класса Animal, и опять-же нужно так Animal *a...

2. Зачем делать переопределенный метод, если можно создать метод под другим именем и пользоваться переменными через оператор super? Пример на картинках.
В данном примере, приведён конструктор, при инициализации иногда бывает удобно сразу инициализировать переменные в конструкторе, пример:

A a(42,42); - проинициализирует переменные...

3. Все говорят что парадигма полиморфизма делает код короче, как короче? И приведите пример.
Самое просто, операция сложение строк в классе string, у нас могут быть не только строки в качестве входных параметров, но и числа например, а реализуется это очень просто, например:

string A = "1+2 = "

string B = A + 3

В итоге мы не задумываемся, что реально происходит в коде, а происходит много чего, но в строке B, будет хранится вот-что: "1+2=3"

Ой, только сейчас понял что залез в раздел JAVA, всё выше написанное больше к С++, но не суть ! :)
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
202
Ой, только сейчас понял что залез в раздел JAVA, всё выше написанное больше к С++, но не суть ! :)
Да всё то же самое, только знак указателя "*" убрать надо и всё!
Прощё понять на примере параметрического полиморфизма см.
Например, ваш класс имеет метод
JavaScript:
public void func(String in)
и другой метод
JavaScript:
public void func(Integer in)
называются они одинаково, но параметры у них разные. В итоге получается, что ваш класс имеет, как бы один метод func, но способный принимать аргументы типа String или типа Integer. Ну и, соответственно, в зависимости от полученного типа аргумента, по разному его обрабатывать. "Из вне", с наружи класса это видится как один универсальный метод func. Такое поведение обычно и называется параметрическим полиморфизмом, чаще просто полиморфизмом или перегрузкой функций - такой термин обычно используется в C/C++.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!