2009-05-05 9 views

Respuesta

41

No; la sobrecarga está creando un método con el mismo nombre con una cantidad diferente de parámetros o con parámetros que son de otro tipo.

El polimorfismo consiste en cambiar la implementación/funcionalidad de un método específico en varios tipos (que tienen el mismo 'tipo base').

Sobrecarga:

public class TestClass 
{ 
    public void DoSomething(int a, int b) {} 

    public void DoSomething(int a, int b, string x) {} 
} 

Polimorfismo:

public abstract class Base 
{ 
    public abstract DoSomething(); 
} 

public class A : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am A"); 
    } 
} 

public class B : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am B"); 
    } 
} 
+0

Esto tiene que ser hecho a través de una interfaz correcta? –

+2

No necesariamente una interfaz. Una clase base común sería suficiente. – sharptooth

+2

Se puede hacer con una interfaz y una clase base o abstracta. El punto es que no importa cuál sea el tipo específico del objeto. Simplemente debe ser indistinguible de la base para el uso de la base; cualquiera que sea la base puede ser –

9

La diferencia entre polimorfismo y sobrecarga de métodos se encuentra en el momento en que se determina el método real de ejecutar. La razón de esto es que cuando se sobrecarga un método, como por ejemplo en:

account = new BankAccount(); 
account = new BankAccount(1000); 

El compilador puede decir qué constructor de usar por la firma del método, incluyendo el número y tipo de parámetros proporcionados. Esta selección de un método para usar en tiempo de compilación, antes de que el programa se ejecute, se denomina vinculación anticipada. Por otro lado, cuando usamos una llamada al método polimórfico como x.getMeasure() el método getMeasure() real llamado depende del tipo de objeto al que se refiere x. Debido a que los objetos no se construyen hasta que se ejecuta el programa, el método llamado se determina en tiempo de ejecución. Por lo tanto, la máquina virtual, no el compilador, selecciona el método apropiado. Esta selección de método se denomina enlace tardío.

1

No, no lo es.

sobrecarga se refiere a la creación de un método o un operador con el mismo nombre, pero con diferentes parámetros y - en función del idioma - diferentes tipos de retorno.

Anulación de refiere a reimplementar un método con la misma firma en una clase derivada y permite polimorfismo - la decisión de qué implementación de un método sobrescribe a llamada se realiza en tiempo de ejecución en función del tipo real del objeto.

class BaseClass 
{ 
    public void DoStuff(Int32 value) { } // Overloading 

    public void DoStuff(String value) { } // Overloading 

    public virtual void DoOtherStuff(String value) { } 
} 

class DerivedClass : BaseClass 
{ 
    public override void DoOtherStuff(String value) { } // Overriding 
} 

Ejemplo de uso

BaseClass instance = null; 

if (condition) 
{ 
    instance = new BaseClass(); 
} 
else 
{ 
    instance = new DerivedClass(); 
} 

// Using overloads 
instance.DoStuff(4); 
instance.DoStuff("four"); 

// Polymorphism - it depends on the actual type of the object 
// referenced by the variable 'instance' if BaseClass.DoOtherStuff() 
// or DerivedClass.DoOtherStuff() will be called at runtime. 
instance.DoOtherStuff("other stuff"); 
5

No.

Polymorphism es una característica del lenguaje de programación que permite valores de los diferentes tipos de datos para ser manejado mediante una interfaz uniforme. El concepto de polimorfismo paramétrico se aplica tanto a los tipos de datos como a las funciones. Una función que puede evaluarse o aplicarse a valores de diferentes tipos se conoce como función polimórfica. Un tipo de datos que puede parecer de un tipo generalizado (por ejemplo, una lista con elementos de tipo arbitrario) se denomina tipo de datos polimórficos, como el tipo generalizado a partir del cual se realizan tales especializaciones.

Method overloading es una característica que se encuentra en varios lenguajes de programación como Ada, C#, C++, D y Java que permite la creación de varios métodos con el mismo nombre, que se diferencian entre sí en términos del tipo de la entrada y el tipo de salida de la función.

La sobrecarga de métodos no debe confundirse con un tipo de polimorfismo o funciones virtuales. En esos, el método correcto se elige en tiempo de ejecución.

Fuente: Wikipedia.

Cuestiones relacionadas