разница между полиморфизмом и перегрузкой

Я нашел там много определений о полиморфизме и перегрузке. Некоторые люди говорили, что перегрузка является одним из типов полиморфизма. Хотя некоторые люди говорили, что они не одинаковы. Потому что в перегрузке будет размещена только одна функция. В то время как полиморфизм нужно выделить память для каждой переопределенной функции-члена. Я действительно чувствую смущение по этому поводу, кто-нибудь может объяснить это для меня?
Кроме того, происходит ли перегрузка во время компиляции, в то время как полиморфизм происходит во время выполнения?

3

Решение

это было сказано Бьярном Страуструпом в его книге, полиморфизм — это то, что представляет собой единую вещь, которая действует во многих формах (то есть) единственная функция, которая действует во многих формах с различными параметрами. поскольку в конструкторе c ++ имя должно совпадать с именем класса, у вас не может быть разных конструкторов с разными именами. так что побороть эту функцию пришла перегрузка. многие люди путают, что перегрузка функций — это тип полиморфизма. они оба на разных концах, они не могут быть связаны друг с другом.

1

Другие решения

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

Вот пример кода, который может помочь осветить ответ:

public class parentClass {
//Overridden method
public void disp()
{
System.out.println("Output:  disp() method of parent class");
}
}

public class childClass extends parentClass {

//You cannot determine whether these methods are polymorphic
//or static polymorphic (aka overridden) simply by their signatures.
//It is by the way they are invoked which determines this.
public void disp(){
System.out.println("    Output: disp() method of Child class");
}

public long add(long a, long b){
return a + b;
}
public int add(int a, int b){
return a+b;
}
public String add(String a, String b){
return a + b;
}

public static void main( String args[]) {

//Here a child class has overridden the disp() method of the
//parent class.  When a child class reference refers to the child
//class overriding method this is known as static polymorphism
//or more simply, overriding.
System.out.println("childClass referencing the childClass's overridden, or static polymorphic method");
childClass myChildObj = new childClass();
myChildObj.disp();

//Another example of static polymorphic, or overridden methods
System.out.println("The following are overridden, or static polymorphic methods:");
System.out.printf("    Long add()override method results:  %d \n",
myChildObj.add(5999999, 1));
System.out.printf("    Integer add() override method results: %d \n",  myChildObj.add(3,2));
System.out.printf("    String add() override method results: %s \n",
myChildObj.add("    First and ...", " Second"));//When the parent class reference refers to the child class object
//then the overriding method  is called.
//This is called dynamic method dispatch and runtime polymorphism
System.out.println("True polymorphism, when the parent class object calls the child class's method:");
parentClass myParentObj = new childClass();
myParentObj.disp();

}
}

Ожидаемый результат:

childClass ссылается на переопределенный или статический полиморфный метод childClass

Output: disp() method of Child class

Ниже перечислены переопределенные или статические полиморфные методы:

Long add()override method results:  6000000

Integer add() override method results: 5

String add() override method results:     First and ... Second

Один пример истинного полиморфизма, когда объект родительского класса вызывает метод дочернего класса:

Output: disp() method of Child class
1

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

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

Нет, это неправда, что полиморфизм происходит во время выполнения. То, что происходит во время выполнения, называется полиморфизмом времени выполнения. Это реализовано с помощью virtual Ключевое слово в C ++.

Надеюсь, это помогло ..

0

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

0

Само слово объясняет ясный смысл. «Поли» означает множественное число, а «морфизм» (используемый в технологии изображений) означает процесс постепенного перехода от одной формы к другой. Таким образом, одна и та же вещь будет иметь разные формы.
Технически, полиморфизм — это способ реализации «множественной реализации единого интерфейса (каркас или структура) (контент или тело)». Полиморфизм — это общий термин, который относится как к перегрузке, так и к переопределению. Перегрузка выполняется в том же классе, где функции или методы с одинаковыми именами имеют разные сигнатуры (список аргументов или тип возвращаемого значения), а переопределение появляется на рисунке в случае наследования, когда интерфейс функции в классе Super имеет аналогичный интерфейс в подклассе. и имеет другую реализацию, чем та, что в суперклассе.
Суперкласс и подкласс образуют иерархию, переходящую от меньшей специализации к большей специализации, и об этом всегда следует помнить при реализации переопределения функций.

0

Полиморфизм основан на следующих 2 концепциях:

  • Перегрузки (компилировать-Временной полиморфизм): методы с тем же именем, но с другой операцией
  • Переопределение (Run-Time полиморфизм): переопределить метод в базовом классе, создав аналогичный метод в производном классе

-Исправил объяснения
Шьям Кодасе

0

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

Полиморфизм — это наследование объектов, подклассов и т. Д.

-1
По вопросам рекламы [email protected]