sirve que poo polimorfismo para herencia encapsulamiento abstraccion oop polymorphism computer-science

oop - que - ¿Qué es el polimorfismo, para qué sirve y cómo se usa?



polimorfismo c++ (27)

Explicación simple por analogía

El presidente de los Estados Unidos emplea el polimorfismo. ¿Cómo? Bueno, él tiene muchos consejeros:

  1. Asesores militares
  2. Asesores legales
  3. Físicos nucleares (como asesores)
  4. Asesores medicos
  5. etcétera etcétera.

Todos deberían ser responsables de una sola cosa: Ejemplo:

El presidente no es un experto en recubrimiento de zinc, o física cuántica. No sabe muchas cosas, pero sí una sola: cómo dirigir el país.

Es algo parecido con el código: las preocupaciones y responsabilidades deben estar separadas de las clases / personas relevantes. De lo contrario, tendrías al presidente sabiendo literalmente todo el mundo, toda la Wikipedia. Imagina tener la wikipedia completa en una clase de tu código: sería una pesadilla mantenerla.

¿Por qué es una mala idea que un presidente sepa todas estas cosas específicas?

Si el presidente le dijera específicamente a la gente qué hacer, eso significaría que el presidente necesita saber exactamente qué hacer. Si el presidente necesita saber cosas específicas por sí mismo, eso significa que cuando necesite hacer un cambio, deberá hacerlo en dos lugares, no solo en uno.

Por ejemplo, si la EPA cambia las leyes de contaminación, entonces, cuando eso suceda, tendrá que hacer un cambio en la Clase de la EPA y también en la clase del Presidente. Cambiar el código en dos lugares en lugar de uno puede ser peligroso, porque es mucho más difícil de mantener.

¿Hay un mejor enfoque?

Hay un mejor enfoque: el presidente no necesita saber los detalles de nada, puede exigir el mejor consejo, de personas específicamente encargadas de hacer esas cosas.

Puede usar un enfoque polimórfico para dirigir el país.

Ejemplo - de utilizar un enfoque polimórfico:

Lo único que hace el presidente es pedirle a la gente que lo aconseje, y eso es lo que realmente hace en la vida real, y eso es lo que debe hacer un buen presidente. todos sus asesores responden de manera diferente, pero todos saben lo que el presidente quiere decir con: Asesorar (). Tiene cientos de personas entrando en su oficina. En realidad no importa quiénes son. Todo lo que sabe el presidente es que cuando les pide que "Aconsejen" saben cómo responder en consecuencia :

public class MisterPresident { public void RunTheCountry() { // assume the Petraeus and Condi classes etc are instantiated. Petraeus.Advise(); // # Petraeus says send 100,000 troops to Fallujah Condolezza.Advise(); // # she says negotiate trade deal with Iran HealthOfficials.Advise(); // # they say we need to spend $50 billion on ObamaCare } }

Este enfoque le permite al presidente dirigir el país literalmente sin saber nada sobre temas militares, atención médica o diplomacia internacional: los detalles se dejan a los expertos. Lo único que el presidente necesita saber es esto: "Asesorar ()".

Lo que no quieres

public class MisterPresident { public void RunTheCountry() { // people walk into the Presidents office and he tells them what to do // depending on who they are. // Fallujah Advice - Mr Prez tells his military exactly what to do. petraeus.IncreaseTroopNumbers(); petraeus.ImproveSecurity(); petraeus.PayContractors(); // Condi diplomacy advice - Prez tells Condi how to negotiate condi.StallNegotiations(); condi.LowBallFigure(); condi.FireDemocraticallyElectedIraqiLeaderBecauseIDontLikeHim(); // Health care healthOfficial.IncreasePremiums(); healthOfficial.AddPreexistingConditions(); } }

¡NO! ¡NO! ¡NO! En el escenario anterior, el presidente está haciendo todo el trabajo: sabe sobre el aumento del número de tropas y las condiciones preexistentes. Esto significa que si las políticas del Medio Oriente cambian, entonces el presidente tendría que cambiar sus órdenes, así como también la clase Petraeus. Solo deberíamos tener que cambiar la clase de Petraeus, porque el Presidente no debería estar atascado en ese tipo de detalles. Él no necesita saber acerca de los detalles. Todo lo que necesita saber es que si hace un pedido, todo se resolverá. Todos los detalles deben dejarse a los expertos.

Esto le permite al presidente hacer lo que mejor sabe hacer: establecer una política general, verse bien y jugar golf: P.

¿Cómo se implementa realmente? A través de una clase base o una interfaz común

Eso en efecto es el polimorfismo, en pocas palabras. ¿Cómo se hace exactamente? A través de "implementar una interfaz común" o utilizando una clase base (herencia), vea las respuestas anteriores que detallan esto con mayor claridad. (Para entender más claramente este concepto, necesita saber qué es una interfaz, y tendrá que entender qué es la herencia. Sin eso, podría tener problemas).

En otras palabras, Petraeus, Condi y HealthOfficials serían clases que "implementan una interfaz"; IAdvisor interfaz de IAdvisor que solo contiene un método: Advise() . Pero ahora estamos entrando en los detalles.

Esto seria ideal

public class MisterPresident { // You can pass in any advisor: Condi, HealthOfficials, Petraeus etc. The president has no idea who it will be. But he does know that he can ask them to "advise" and that''s all Mr Prez cares for. public void RunTheCountry(IAdvisor governmentOfficer) { governmentOfficer.Advise(); } } public class USA { MisterPresident president; public USA(MisterPresident president) { this.president = president; } public void ImplementPolicy() { IAdvisor governmentOfficer = getAdvisor(); // Returns an advisor: could be condi, or petraus etc. president.RunTheCountry(governmentOfficer); } }

Resumen

Todo lo que realmente necesitas saber es esto:

  • El presidente no necesita conocer los detalles, los deja a los demás.
  • Todo lo que el presidente debe saber es preguntar quién entra por la puerta para aconsejarlo, y sabemos que sabrán absolutamente qué hacer cuando se les pida que lo aconsejen (porque todos están en la actualidad, asesores (o asesores))

Realmente espero que te ayude. Si no entiendes nada, publica un comentario y lo intentaré de nuevo.

Estaba viendo un video de Google Tech Talks , y con frecuencia se referían al polimorfismo.

¿Qué es el polimorfismo, para qué sirve y cómo se usa?


(Estaba navegando en otro artículo sobre algo completamente diferente ... y apareció un polimorfismo ... Ahora pensé que sabía lo que era el Polimorfismo ... pero aparentemente no de esta manera hermosa explicada ... Quería escribirlo en algún lugar ... mejor aún lo compartirá ...)

http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife

sigue leyendo de esta parte:

..... polimorfismo. Esa es una forma geek de decir que diferentes nombres pueden tener el mismo verbo aplicado a ellos.


De entender y aplicar el polimorfismo en PHP , gracias Steve Guidetti.

Polimorfismo es una palabra larga para un concepto muy simple.

El polimorfismo describe un patrón en la programación orientada a objetos en el que las clases tienen una funcionalidad diferente al compartir una interfaz común.

La belleza del polimorfismo es que el código que trabaja con las diferentes clases no necesita saber qué clase está usando, ya que todas se usan de la misma manera. Una analogía del mundo real para el polimorfismo es un botón. Todo el mundo sabe cómo usar un botón: simplemente le presionas. Sin embargo, lo que “hace” un botón depende de a qué está conectado y del contexto en el que se usa, pero el resultado no afecta la forma en que se usa. Si su jefe le dice que presione un botón, ya tiene toda la información necesaria para realizar la tarea.

En el mundo de la programación, el polimorfismo se utiliza para hacer que las aplicaciones sean más modulares y extensibles. En lugar de declaraciones condicionales desordenadas que describen diferentes cursos de acción, crea objetos intercambiables que selecciona de acuerdo con sus necesidades. Ese es el objetivo básico del polimorfismo.


El polimorfismo es cuando puedes tratar un objeto como una versión genérica de algo, pero cuando accedes a él, el código determina qué tipo exacto es y llama al código asociado.

Aquí hay un ejemplo en C #. Crea cuatro clases dentro de una aplicación de consola:

public abstract class Vehicle { public abstract int Wheels; } public class Bicycle : Vehicle { public override int Wheels() { return 2; } } public class Car : Vehicle { public override int Wheels() { return 4; } } public class Truck : Vehicle { public override int Wheels() { return 18; } }

Ahora cree lo siguiente en el Main () del módulo para la aplicación de consola:

public void Main() { List<Vehicle> vehicles = new List<Vehicle>(); vehicles.Add(new Bicycle()); vehicles.Add(new Car()); vehicles.Add(new Truck()); foreach (Vehicle v in vehicles) { Console.WriteLine( string.Format("A {0} has {1} wheels.", v.GetType().Name, v.Wheels)); } }

En este ejemplo, creamos una lista de la clase base Vehículo, que no sabe cuántas ruedas tiene cada una de sus subclases, pero sí sabe que cada subclase es responsable de saber cuántas ruedas tiene.

Luego agregamos una Bicicleta, Coche y Camión a la lista.

A continuación, podemos recorrer cada Vehículo en la lista y tratarlos a todos de manera idéntica, sin embargo, cuando accedemos a la propiedad de cada Rueda de un Vehículo, la clase Vehículo delega la ejecución de ese código a la subclase correspondiente.

Se dice que este código es polimórfico, ya que el código exacto que se ejecuta está determinado por la subclase a la que se hace referencia en tiempo de ejecución.

Espero que esto te ayude.


El polimorfismo es este:

class Cup { int capacity } class TeaCup : Cup { string flavour } class CoffeeCup : Cup { string brand } Cup c = new CoffeeCup(); public int measure(Cup c) { return c.capacity }

puedes pasar solo una Copa en lugar de una instancia específica. Esto ayuda en general porque no tiene que proporcionar una instancia específica de measure () por cada tipo de taza


El polimorfismo es la capacidad de tratar una clase de objeto como si fuera la clase principal.

Por ejemplo, supongamos que hay una clase llamada Animal y una clase llamada Dog que hereda de Animal. El polimorfismo es la capacidad de tratar cualquier objeto de perro como un objeto animal de esta manera:

Dog* dog = new Dog; Animal* animal = dog;


El polimorfismo es la capacidad del programador para escribir métodos del mismo nombre que hacen diferentes cosas para diferentes tipos de objetos, dependiendo de las necesidades de esos objetos. Por ejemplo, si estuviera desarrollando una clase llamada Fraction y una clase llamada ComplexNumber , ambos podrían incluir un método llamado display() , pero cada uno de ellos implementaría ese método de manera diferente. En PHP, por ejemplo, podrías implementarlo así:

// Class definitions class Fraction { public $numerator; public $denominator; public function __construct($n, $d) { // In real life, you''d do some type checking, making sure $d != 0, etc. $this->numerator = $n; $this->denominator = $d; } public function display() { echo $this->numerator . ''/'' . $this->denominator; } } class ComplexNumber { public $real; public $imaginary; public function __construct($a, $b) { $this->real = $a; $this->imaginary = $b; } public function display() { echo $this->real . ''+'' . $this->imaginary . ''i''; } } // Main program $fraction = new Fraction(1, 2); $complex = new ComplexNumber(1, 2); echo ''This is a fraction: '' $fraction->display(); echo "/n"; echo ''This is a complex number: '' $complex->display(); echo "/n";

Salidas:

This is a fraction: 1/2 This is a complex number: 1 + 2i

Algunas de las otras respuestas parecen implicar que el polimorfismo se usa solo en conjunción con la herencia; por ejemplo, tal vez Fractiony ComplexNumberambos implementan una clase abstracta llamada Numberque tiene un método display(), que Fraction y ComplexNumber están obligados a implementar. Pero no necesitas herencia para aprovechar el polimorfismo.

Al menos en lenguajes de tipo dinámico como PHP (no sé acerca de C ++ o Java), el polimorfismo permite al desarrollador llamar a un método sin conocer necesariamente el tipo de objeto de antemano, y confiar en que la implementación correcta del método ser llamado. Por ejemplo, digamos que el usuario elige el tipo de Numbercreado:

$userNumberChoice = $_GET[''userNumberChoice'']; switch ($userNumberChoice) { case ''fraction'': $userNumber = new Fraction(1, 2); break; case ''complex'': $userNumber = new ComplexNumber(1, 2); break; } echo "The user''s number is: "; $userNumber->display(); echo "/n";

En este caso, display()se llamará al método apropiado , aunque el desarrollador no puede saber de antemano si el usuario elegirá una fracción o un número complejo.


El término polimorfismo proviene de:

poli = muchos

morfismo = la capacidad de cambiar

En programación, el polimorfismo es una "técnica" que le permite "mirar" a un objeto como algo más que un tipo de cosa. Por ejemplo:

Un objeto de estudiante es también un objeto de persona. Si usted "mira" (es decir, elenco) al estudiante, probablemente puede solicitar la identificación del estudiante. No siempre puedes hacer eso con una persona, ¿verdad? (una persona no es necesariamente un estudiante, por lo tanto, puede que no tenga una identificación de estudiante). Sin embargo, una persona probablemente tiene un nombre. Un estudiante también lo hace.

En pocas palabras, "mirar" el mismo objeto desde diferentes "ángulos" puede darle diferentes "perspectivas" (es decir, diferentes propiedades o métodos)

Así que esta técnica te permite construir cosas que se pueden "mirar" desde diferentes ángulos.

¿Por qué usamos el polimorfismo? Para empezar ... la abstracción. En este punto debería ser suficiente información :)


En términos generales, es la capacidad de interconectar varios tipos diferentes de objetos utilizando la misma API o una API superficialmente similar. Hay varias formas:

  • Sobrecarga de funciones: definir múltiples funciones con el mismo nombre y diferentes tipos de parámetros, como sqrt (float), sqrt (double) y sqrt (complex). En la mayoría de los idiomas que lo permiten, el compilador seleccionará automáticamente el correcto para el tipo de argumento que se le transmite, por lo que este es un polimorfismo en tiempo de compilación.

  • Métodos virtuales en OOP: un método de una clase puede tener varias implementaciones adaptadas a las características específicas de sus subclases; se dice que cada uno de estos anula la implementación dada en la clase base. Dado un objeto que puede ser de la clase base o cualquiera de sus subclases, la implementación correcta se selecciona sobre la marcha, por lo que este es un polimorfismo en tiempo de ejecución.

  • Plantillas: una característica de algunos idiomas OO mediante la cual una función, clase, etc. puede ser parametrizada por un tipo. Por ejemplo, puede definir una clase de plantilla "lista" genérica y luego crear una instancia como "lista de enteros", "lista de cadenas", tal vez incluso "lista de listas de cadenas" o similares. Generalmente, se escribe el código una vez para una estructura de datos de tipo de elemento arbitrario, y el compilador genera versiones del mismo para los diversos tipos de elementos.



Sé que esta es una pregunta antigua con muchas respuestas buenas, pero me gustaría incluir una respuesta de una oración:

Tratar un tipo derivado como si fuera su tipo base.

Hay muchos ejemplos anteriores que muestran esto en acción, pero creo que esta es una buena respuesta concisa.


Si alguien dice CORTE a estas personas.

  1. El cirujano
  2. El estilista
  3. El actor

¿Lo que sucederá?

  • El cirujano comenzaría a hacer una incisión.
  • El estilista empezaría a cortar el cabello de alguien.
  • El Actor dejaría repentinamente de actuar fuera de la escena actual, a la espera de la orientación del director.

Entonces, la representación anterior muestra lo que es el polimorfismo (mismo nombre, comportamiento diferente) en la POO.

Si va a una entrevista y el entrevistador le pide que cuente / muestre un ejemplo en vivo de polimorfismo en la misma sala en la que estamos sentados, por ejemplo:

Respuesta - Puerta / Windows

Se pregunta cómo?

A través de la puerta / ventana: una persona puede venir, puede venir aire, puede venir luz, puede venir lluvia, etc.

Para entenderlo mejor y de una manera simple, utilicé el ejemplo anterior. Si necesita una referencia para el código, siga las respuestas anteriores.


Si piensas en las raíces griegas del término, debería ser obvio.

  • Poli = muchos: polígono = muchos lados, poliestireno = muchos estirenos (a) , políglota = muchos idiomas, y así sucesivamente.
  • Morph = cambio o forma: morfología = estudio de la forma biológica, Morpheus = el dios griego de los sueños capaz de tomar cualquier forma.

Entonces, el polimorfismo es la capacidad (en programación) de presentar la misma interfaz para diferentes formas subyacentes (tipos de datos).

Por ejemplo, en muchos idiomas, los enteros y los flotantes son polimórficos implícitamente, ya que puede sumar, restar, multiplicar, etc., independientemente del hecho de que los tipos sean diferentes. Rara vez se consideran objetos en el término habitual.

Pero, de la misma manera, una clase como BigDecimal o Rational o Imaginary también puede proporcionar esas operaciones, aunque operen con diferentes tipos de datos.

El ejemplo clásico es la clase Shape y todas las clases que pueden heredar de ella (cuadrado, círculo, dodecaedro, polígono irregular, splat, etc.).

Con el polimorfismo, cada una de estas clases tendrá diferentes datos subyacentes. Una forma de punto solo necesita dos coordenadas (suponiendo que esté en un espacio bidimensional, por supuesto). Un círculo necesita un centro y un radio. Un cuadrado o un rectángulo necesita dos coordenadas para las esquinas superior izquierda e inferior derecha y (posiblemente) una rotación. Un polígono irregular necesita una serie de líneas.

Al hacer que la clase sea responsable de su código y de sus datos, puede lograr el polimorfismo. En este ejemplo, cada clase tendría su propia función Draw() y el código del cliente podría simplemente hacer:

shape.Draw()

Para obtener el comportamiento correcto para cualquier forma.

Esto contrasta con la antigua forma de hacer las cosas en las que el código estaba separado de los datos, y habría tenido funciones como drawSquare() y drawCircle() .

La orientación a objetos, el polimorfismo y la herencia son conceptos estrechamente relacionados y son vitales para saber. Ha habido muchas "balas de plata" durante mi larga carrera que básicamente se desvaneció pero el paradigma OO ha resultado ser uno bueno. Apréndelo, entiende, ama, te alegrarás de haberlo hecho :-)

(a) Originalmente escribí eso como una broma, pero resultó ser correcto y, por lo tanto, no tan gracioso. El momómero estireno está hecho de carbono e hidrógeno, C 8 H 8 , y el poliestireno está hecho de grupos de eso, (C 8 H 8 ) n .

Tal vez debería haber afirmado que un pólipo era muchas apariciones de la letra p , aunque ahora que he tenido que explicar la broma, incluso eso no parece gracioso.

A veces, simplemente debes dejar de fumar mientras estás detrás :-)


Usemos una analogía. Para un guión musical dado, cada músico que lo toca le da su propio toque en la interpretación.

El músico se puede abstraer con interfaces, el género al que pertenece el músico puede ser una clase abstracta que define algunas reglas globales de interpretación y cada músico que toca puede modelarse con una clase concreta.

Si usted es un oyente de la obra musical, tiene una referencia al guión, por ejemplo, ''Fuga y Tocata'' de Bach, y cada músico que lo interpreta lo hace polimorfamente a su manera.

Este es solo un ejemplo de un posible diseño (en Java):

public interface Musician { public void play(Work work); } public interface Work { public String getScript(); } public class FugaAndToccata implements Work { public String getScript() { return Bach.getFugaAndToccataScript(); } } public class AnnHalloway implements Musician { public void play(Work work) { // plays in her own style, strict, disciplined String script = work.getScript() } } public class VictorBorga implements Musician { public void play(Work work) { // goofing while playing with superb style String script = work.getScript() } } public class Listener { public void main(String[] args) { Musician musician; if (args!=null && args.length > 0 && args[0].equals("C")) { musician = new AnnHalloway(); } else { musician = new TerryGilliam(); } musician.play(new FugaAndToccata()); }


Polimorfismo:

Es el concepto de programación orientada a objetos. La capacidad de los diferentes objetos para responder, cada uno a su manera, a mensajes idénticos se denomina polimorfismo.

El polimorfismo resulta del hecho de que cada clase vive en su propio espacio de nombres. Los nombres asignados dentro de una definición de clase no entran en conflicto con los nombres asignados en ningún lugar fuera de ella. Esto es cierto tanto para las variables de instancia en la estructura de datos de un objeto como para los métodos del objeto:

  • Así como los campos de una estructura C están en un espacio de nombres protegido, también lo son las variables de instancia de un objeto.

  • Los nombres de los métodos también están protegidos. A diferencia de los nombres de las funciones C, los nombres de los métodos no son símbolos globales. El nombre de un método en una clase no puede entrar en conflicto con los nombres de los métodos en otras clases; Dos clases muy diferentes pueden implementar métodos con nombres idénticos.

Los nombres de los métodos son parte de la interfaz de un objeto. Cuando se envía un mensaje solicitando que un objeto haga algo, el mensaje nombra el método que debe realizar el objeto. Debido a que diferentes objetos pueden tener métodos con el mismo nombre, el significado de un mensaje debe entenderse en relación con el objeto en particular que recibe el mensaje. El mismo mensaje enviado a dos objetos diferentes puede invocar dos métodos distintos.

El principal beneficio del polimorfismo es que simplifica la interfaz de programación. Permite establecer convenciones que pueden reutilizarse en clase tras clase. En lugar de inventar un nuevo nombre para cada nueva función que agregue a un programa, se pueden reutilizar los mismos nombres. La interfaz de programación se puede describir como un conjunto de comportamientos abstractos, aparte de las clases que los implementan.

Ejemplos:

Ejemplo-1: Aquí hay un ejemplo simple escrito en Python 2.x.

class Animal: def __init__(self, name): # Constructor of the class self.name = name def talk(self): # Abstract method, defined by convention only raise NotImplementedError("Subclass must implement abstract method") class Cat(Animal): def talk(self): return ''Meow!'' class Dog(Animal): def talk(self): return ''Woof! Woof!'' animals = [Cat(''Missy''), Dog(''Lassie'')] for animal in animals: print animal.name + '': '' + animal.talk()

Ejemplo-2: el polimorfismo se implementa en Java utilizando la sobrecarga de métodos y los conceptos de reemplazo de métodos.

Consideremos el ejemplo de coche para discutir el polimorfismo. Tome cualquier marca como Ford, Honda, Toyota, BMW, Benz, etc., todo es de tipo automóvil.

Pero cada uno tiene sus propias características avanzadas y una tecnología más avanzada involucrada en su comportamiento de movimiento.

Ahora vamos a crear un coche de tipo básico.

Car.java

public class Car { int price; String name; String color; public void move(){ System.out.println("Basic Car move"); } }

Implementemos el ejemplo de Ford Car.

Ford amplía el tipo Car para heredar todos sus miembros (propiedades y métodos).

Ford.java

public class Ford extends Car{ public void move(){ System.out.println("Moving with V engine"); } }

La clase Ford anterior extiende la clase Car y también implementa el método move (). A pesar de que el método de movimiento ya está disponible para Ford a través de la herencia, Ford todavía ha implementado el método a su manera. Esto se llama anulación de método.

Honda.java

public class Honda extends Car{ public void move(){ System.out.println("Move with i-VTEC engine"); } }

Al igual que Ford, Honda también extiende el tipo de Coche e implementó el método de movimiento a su manera.

La anulación del método es una característica importante para habilitar el polimorfismo. Usando la sustitución de métodos, los Subtipos pueden cambiar la forma en que funcionan los métodos que están disponibles a través de la herencia.

Ejemplo de polimorfismo.java

public class PolymorphismExample { public static void main(String[] args) { Car car = new Car(); Car f = new Ford(); Car h = new Honda(); car.move(); f.move(); h.move(); } }

Ejemplo de polimorfismo de salida:

En el método principal de la clase PolymorphismExample, he creado tres objetos: Car, Ford y Honda. Los tres objetos son referidos por el tipo de Coche.

Tenga en cuenta un punto importante aquí: Un tipo de súper clase puede referirse a un tipo de objeto de subclase, pero no es posible el verso de vicio. La razón es que todos los miembros de la superclase están disponibles para la subclase usando la herencia y durante el tiempo de compilación, el compilador intenta evaluar si el tipo de referencia que estamos usando tiene el método al que intenta acceder.

Por lo tanto, para las referencias car, f y h en el PolymorphismExample, el método de movimiento existe desde el tipo Car. Por lo tanto, el compilador pasa el proceso de compilación sin ningún problema.

Pero cuando se trata de la ejecución en tiempo de ejecución, la máquina virtual invoca los métodos en los objetos que son subtipos. Así, el método move () se invoca desde sus respectivas implementaciones.

Por lo tanto, todos los objetos son de tipo Coche, pero durante el tiempo de ejecución, la ejecución depende del Objeto en el que se produce la invocación. Esto se llama polimorfismo.


El polimorfismo en la OOP significa que una clase podría tener diferentes tipos, la herencia es una forma de implementar el polimorfismo.

por ejemplo, Shape es una interfaz, tiene subtipos Cuadrado , Círculo , Diamante . ahora que tiene un objeto Cuadrado, puede cambiar de forma cuadrada a Forma automáticamente, porque Cuadrado es una Forma. Pero cuando intentas hacer un downcasting de Shape to Square, debes hacer una conversión de tipos explícita, porque no puedes decir que Shape is Square, también podría ser Circle. por lo que necesita convertirlo manualmente con código como Square s = (Square)shape, lo que si la forma es Círculo, obtendrá java.lang.ClassCastException, porque Círculo no es Cuadrado.


El polimorfismo le brinda la capacidad de crear un módulo que llama a otro y, sin embargo, tener el punto de dependencia del tiempo de compilación contra el flujo de control en lugar de con el flujo de control.

Al utilizar el polimorfismo, un módulo de alto nivel no depende de un módulo de bajo nivel. Ambos dependen de las abstracciones. Esto nos ayuda a aplicar el principio de inversión de dependencia ( https://en.wikipedia.org/wiki/Dependency_inversion_principle ).

Aquí es donde encontré la definición anterior. Alrededor de 50 minutos en el video el instructor explica lo anterior. https://www.youtube.com/watch?v=TMuno5RZNeE


El polimorfismo permite que la misma rutina (función, método) actúe sobre diferentes tipos.

Dado que muchas respuestas existentes están combinando subtipo con polimorfismo, aquí hay tres formas (incluido el subtipo) para implementar el polimorfismo.

  • El polimorfismo paramétrico (genérico) permite que una rutina acepte uno o más parámetros de tipo, además de los parámetros normales, y se ejecuta solo en esos tipos.
  • El polimorfismo de subtipo permite que una rutina actúe sobre cualquier subtipo de sus parámetros.
  • El polimorfismo ad hoc generalmente utiliza la sobrecarga de rutina para otorgar un comportamiento polimórfico, pero también puede referirse a otras implementaciones de polimorfismo.

Ver también:

wiki.c2.com/?CategoryPolymorphism

https://en.wikipedia.org/wiki/Polymorphism_(computer_science)


He proporcionado una descripción general de alto nivel del polimorfismo para otra pregunta:

Polimorfismo en c ++

Espero eso ayude. Un extracto...

... ayuda a partir de una prueba simple y una definición de [polimorfismo]. Considere el código:

Type1 x; Type2 y; f(x); f(y);

Aquí, f()es para realizar alguna operación y se le están dando los valores xy ycomo entradas. Para ser polimórfico, f()debe poder operar con valores de al menos dos tipos distintos (por ejemplo, inty double), encontrando y ejecutando el código apropiado para el tipo.

(continuado en Polymorphism in c ++ )


Polimorfismo => Ejecución diferente según instancia de clase, no tipo de variable de referencia.

Una variable de referencia de tipo de interfaz puede hacer referencia a cualquiera de las instancias de clase que implementa esa interfaz.


El polimorfismo en términos de codificación es cuando su objeto puede existir como múltiples tipos a través de la herencia, etc. Si crea una clase llamada "Forma" que define la cantidad de lados que tiene su objeto, puede crear una nueva clase que la herede como "Cuadrado ". Cuando posteriormente creas una instancia de "Cuadrado", puedes lanzarla desde "Forma" a "Cuadrado" según sea necesario.


El polimorfismo es la capacidad de un objeto para adoptar muchas formas. El uso más común del polimorfismo en la OOP se produce cuando se utiliza una referencia de clase primaria para referirse a un objeto de clase secundaria. En este ejemplo que está escrito en Java, tenemos tres tipos de vehículo. Creamos tres objetos diferentes y tratamos de ejecutar el método de sus ruedas:

public class PolymorphismExample { public static abstract class Vehicle { public int wheels(){ return 0; } } public static class Bike extends Vehicle { @Override public int wheels() { return 2; } } public static class Car extends Vehicle { @Override public int wheels() { return 4; } } public static class Truck extends Vehicle { @Override public int wheels() { return 18; } } public static void main(String[] args) { Vehicle bike = new Bike(); Vehicle car = new Car(); Vehicle truck = new Truck(); System.out.println("Bike has "+bike.wheels()+" wheels"); System.out.println("Car has "+car.wheels()+" wheels"); System.out.println("Truck has "+truck.wheels()+" wheels"); } }

El resultado es:

Para obtener más información, visite https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java . Espero que ayude.


El polimorfismo es la capacidad de usar un objeto en una clase dada, donde todos los componentes que componen el objeto son heredados por las subclases de la clase dada. Esto significa que una vez que este objeto es declarado por una clase, todas las subclases debajo de él (y sus subclases, y así sucesivamente hasta que llegue a la subclase más alejada / más baja) heredan el objeto y sus componentes (composición).

Recuerde que cada clase debe guardarse en archivos separados.

El siguiente código ejemplifica el polimorfismo:

La SuperClase:

public class Parent { //Define things that all classes share String maidenName; String familyTree; //Give the top class a default method public void speak(){ System.out.println("We are all Parents"); } }

El padre, una subclase:

public class Father extends Parent{ //Can use maidenName and familyTree here String name="Joe"; String called="dad"; //Give the top class a default method public void speak(){ System.out.println("I am "+name+", the father."); } }

El niño, otra subclase:

public class Child extends Father { //Can use maidenName, familyTree, called and name here //Give the top class a default method public void speak(){ System.out.println("Hi "+called+". What are we going to do today?"); } }

El método de ejecución, hace referencia a la clase padre para comenzar:

public class Parenting{ public static void main(String[] args) { Parent parents = new Parent(); Parent parent = new Father(); Parent child = new Child(); parents.speak(); parent.speak(); child.speak(); } }

Tenga en cuenta que cada clase debe declararse en archivos * .java separados. El código debe compilar. También tenga en cuenta que puede utilizar continuamente maidenName y familyTree más abajo. Ese es el concepto de polimorfismo. El concepto de herencia también se explora aquí, donde una clase se puede usar o se define en una subclase.

Espero que esto ayude y que quede claro. Publicaré los resultados cuando encuentre una computadora que pueda usar para verificar el código. Gracias por la paciencia!


El polimorfismo es una habilidad de objeto que puede adoptarse de muchas formas. Por ejemplo, en la clase humana, un hombre puede actuar de muchas formas cuando hablamos de relaciones. EX: Un hombre es un padre para su hijo y él es el esposo de su esposa y él es maestro para sus estudiantes.


El polimorfismo significa literalmente, múltiples formas. (o muchas formas): objeto de diferentes clases y método del mismo nombre, pero los flujos de trabajo son diferentes. Un ejemplo simple sería:

Considera una persona X.

Él es una sola persona, pero actúa como muchos. Puedes preguntar cómo:

Es un hijo para su madre. Un amigo a sus amigos. Un hermano para su hermana.


En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un lenguaje de programación para procesar objetos de manera diferente según su tipo de datos o clase . Más específicamente, es la capacidad de redefinir métodos para clases derivadas.


En los lenguajes orientados a objetos, el polimorfismo permite el tratamiento y manejo de diferentes tipos de datos a través de la misma interfaz. Por ejemplo, considere la herencia en C ++: la clase B se deriva de la clase A. Se puede usar un puntero de tipo A * (puntero a la clase A) para manejar tanto un objeto de clase A Y un objeto de clase B.