¿Es el polimorfismo otro término para sobrecargar?¿Es el polimorfismo otro término para sobrecargar?
Respuesta
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");
}
}
Esto tiene que ser hecho a través de una interfaz correcta? –
No necesariamente una interfaz. Una clase base común sería suficiente. – sharptooth
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 –
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.
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");
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.
- 1. ¿Cuál es el término correcto para el token '...'?
- 2. ¿Cuál es el actual término moderno para "multi-byte Set"
- 3. ¿Cuál es el término para describir esta combinación?
- 4. ¿Cuál es el término para design ala "object.method1(). Method2(). Method3()"?
- 5. ¿Cuál es la diferencia entre sobrecargar operator = y sobrecargar el constructor de copia?
- 6. ¿Es este el ejemplo del polimorfismo?
- 7. ¿Es posible el polimorfismo multinivel en SQLAlchemy?
- 8. ¿Es realmente polimorfismo lo que parece ser polimorfismo en PHP?
- 9. ¿Es posible sobrecargar la función en F #?
- 10. Decorador para sobrecargar en Python
- 11. Cómo sobrecargar el operador -> *?
- 12. CRTP para evitar el polimorfismo dinámico
- 13. ¿Cuál es el significado del término "Clase personalizada"?
- 14. ¿Currying es lo mismo que sobrecargar?
- 15. C#: ¿Es la varianza (covarianza/contravarianza) otra palabra para polimorfismo?
- 16. ¿Es posible sobrecargar la asignación de Python?
- 17. ¿Es posible sobrecargar las mezclas en sass?
- 18. término común para el "basada en el valor" operador OR
- 19. es posible sobrecargar un método final
- 20. ¿Es posible sobrecargar/importar en Python?
- 21. ¿Es este un uso apropiado del polimorfismo?
- 22. ¿Qué significa el término "BODMAS"?
- 23. ¿Alguien puede explicarme el polimorfismo?
- 24. Genéricos, polimorfismo, interfaces: ¿cuál es la solución?
- 25. ¿Cuál es el uso exacto del término REALM en seguridad?
- 26. ¿Qué es el polimorfismo paramétrico en Java (con ejemplo)?
- 27. ¿El término "libc" es equivalente a "biblioteca estándar C"?
- 28. ¿Cuál es el significado del término "función libre" en C++?
- 29. cuál es la diferencia entre las plantillas y el polimorfismo
- 30. JSON polimorfismo
Aquí hay una pregunta muy relacionada http://stackoverflow.com/questions/673721/overloading-and-overriding – sharptooth
O esta http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading – ktulur
Creo que este tiene una mejor respuesta :) – thomasrutter