2010-03-08 4 views

ответ

12

«Полиморфизм» - это просто слово и не имеет согласованного на глобальном уровне точного определения. Вы не будете просвещены ни ответом «да», ни «нет» на ваш вопрос, потому что разница будет в выбранном определении «полиморфизма», а не в сущности перегрузки метода как функции какого-либо конкретного языка. Вы можете увидеть доказательства этого в большинстве других ответов здесь, каждый из которых представляет свое собственное определение, а затем оценивает языковые особенности.

11

Строго говоря полиморфизм, от wikipedia:

является способность одного типа, A, чтобы выглядеть как и быть использованы как другой тип, B.

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

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

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

10

Нет, перегрузка не является. Возможно, вы ссылаетесь на method overriding, который действительно является частью полиморфизма.

В целях дальнейшего уточнения, Из википедии:

Полиморфизм не является таким же, как метод перегрузки или переопределения метода. 1 Полиморфизм касается только применения конкретных вариантов реализации интерфейса или более общий базовый класс.

Так что я бы сказал, что метод переопределение и способу перегрузки и удобные функции некоторому языка относительно полиморфизма, но notthe главной заботы полиморфизма (в объектно-ориентированном программировании), который касается лишь к способности объекта действовать, как если он был еще одним объектом в своей иерархической цепочке.

+3

См. Http://www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf, почему это неправильно. –

+3

См. Http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf (в частности, раздел 1.3), чтобы, возможно, легче было понять, почему это неправильно. – overthink

+1

Википедия не надежна ... вы всегда должны обратиться к источникам. –

38

There are different types of polymorphism:

  • перегрузка полиморфизма (также называемый Ad-Hoc полиморфизмом)
  • переопределяет полиморфизм

Так да, это часть полиморфизма.

+3

Вы должны упомянуть, что «фактическая точность этого раздела оспаривается», поэтому еще не указано 100%, что перегрузка - это полиморфизм, как я понимаю. –

+2

@FractalizeR может быть, ваше понимание ограничено время выполнения полиморфизма в объектно-ориентированных языках, а не термин в общем –

+1

я только со ссылкой на исправив и здесь;) –

1

нет, overriding есть overloading что-то другое

+1

Этот ответ был бы правильным, если бы вопрос заключался в том, что «метод перегружает часть ** включения ** полиморфизма?». –

-3

Это необходимое зло, что есть и должны быть использованы только в качестве дополнения. В конце концов, перегрузки должны только преобразовывать и, в конечном счете, переходить к основному методу. OverloDing необходимо, потому что большинство vms для статичных файлов не знают, как преобразовать один тип в другой, чтобы параметр соответствовал цели, и именно здесь вы используете перегрузки, чтобы помочь.

StringBuilder 
    Append(String) // main 
    Append(Boolean) // converts and calls append(String) 
+1

Пожалуйста, ответьте на вопрос, а не комментируйте общую тему. Кроме того, проверьте правильность написания. –

9

Существует 2 типа полиморфизма.

  1. статический
  2. динамичными.

Перегрузки имеет тип статического полиморфизма .. наиважнейшая приходит в динамических (или во время выполнения) Полиморфизм ..

исх. http://en.wikipedia.org/wiki/Polymorphism_(computer_science), который описывает его больше.

3

Wikipedia pedantics в стороне, один из способов думать о полиморфизме: возможность одной строки вызова кода/одного метода выполнять разные вещи во время выполнения в зависимости от типа экземпляра объекта, используемого для совершения вызова.

Перегрузка метода не изменяет поведения во время выполнения. Перегрузка дает вам больше вариантов списков аргументов с тем же именем метода, когда вы пишете и компилируете код, но когда он скомпилирован, выбор фиксируется в коде навсегда.

Не следует путать с переопределением метода, который является частью полиморфизма.

+0

Это одно узкое определение полиморфизма; есть определения, которые утверждают, что это больше, чем просто поведение во время выполнения. (В любом случае, рассмотрите также язык, такой как Groovy, где перегрузки ** ** разрешены во время выполнения.) –

3

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

Для реализации полиморфизма с использованием переопределения метода вы можете переопределить поведение метода в подклассе.

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

Другие способы реализации полиморфизма - это перегрузка и реализация интерфейсов оператора.

Смежные вопросы