Java >> Tutorial de Java >  >> Java

Ejemplo de Java de polimorfismo (con video)

En esta publicación, presentamos un ejemplo completo de Java de polimorfismo.

1. Introducción

En la palabra polimorfismo, la palabra Poly significa "muchos" y la palabra morph significa "formas". El polimorfismo es la capacidad de un objeto para adoptar muchas formas. El polimorfismo es la capacidad de una acción o método para hacer cosas diferentes en función del objeto sobre el que se realiza la acción. El polimorfismo es uno de los principios de la programación orientada a objetos que se utiliza junto con la encapsulación y la herencia en lenguajes de programación como C++, Java y Python. Brinda flexibilidad a los programadores para interactuar con diferentes objetos usando el mismo mensaje.

También puedes consultar este tutorial en el siguiente vídeo:

2. Tipos de polimorfismo

En Java, el polimorfismo se puede lograr de dos maneras mediante la sobrecarga de métodos y la anulación de métodos. La sobrecarga de métodos también se denomina polimorfismo en tiempo de compilación o enlace temprano, mientras que la anulación de métodos también se denomina polimorfismo en tiempo de ejecución o enlace tardío. Comprendamos ahora en detalle ambos.

2.1 Sobrecarga de métodos

Se dice que dos métodos están sobrecargados si tienen el mismo nombre de método y diferentes parámetros, es decir, dos métodos deben tener un número diferente de parámetros o los tipos de datos de los parámetros de dos métodos deben ser diferentes.

Entendamos esto con un fragmento de codificación a continuación:

// program to show method overloading in java
package com.javacodegeeks.snippets.core;

class Example1
{
	public static String add(String s1, String s2) //method to perform String concatenation
	{
		return s1+s2;
	}

	public static int add(int a,int b)  //method to perform int addition
	{
		return a+b;
	}
	public static void main(String[] args) {
		
		System.out.println(add(10,30));  //calls add function with int params
		System.out.println(add("Rajesh","Kumar")); //calls add function with String params
	}
}
Salida
40
RajeshKumar

En este ejemplo, cuando pasamos parámetros de cadena al método add, se ejecuta el método add() en la línea 6. Este método devuelve la cadena después de la concatenación de las cadenas s1 y s2. Pero cuando pasamos valores enteros al método add, el método add() en la línea 11 se ejecuta y devuelve la suma de dos valores. Aquí usamos el mismo nombre de método agregar, podemos interactuar con dos funcionalidades basadas en los parámetros que se pasan.

El compilador puede reconocer estas llamadas a métodos y, por lo tanto, también se denomina Polimorfismo en el tiempo de compilación.

2.2 Método de anulación

En la anulación de métodos, durante la herencia, una clase secundaria proporciona su propia implementación al método de los padres, anulando así la implementación del padre. Se dice que dos métodos se anulan solo si tienen la misma firma, es decir, el mismo nombre y los mismos parámetros.

En este contexto, el método del padre se denomina método anulado y el método del niño se denomina método anulado.

Entendamos qué contiene el fragmento de codificación a continuación:

  • Shape la clase tiene dos métodos, drawShape() y eraseShape() .
  • Clases Circle , Square y Triangle extender Shape y anular sus dos métodos, cada uno de una manera diferente.
  • RandomShapeGenerator la clase tiene un método, Shape next() que crea aleatoriamente una de las clases anteriores, Circle , Square y Triangle .
  • Creamos un nuevo RandomShapeGenerator instancia y un nuevo Shape matriz.
  • Rellenamos el Shape matriz, creando formas aleatorias, usando el next() método de RandomShapeGenerator .
  • Luego llamamos drawShape() método, por lo que cada vez que se llama al método del objeto creado aleatoriamente.

Let us take a look at the code snippet that follows:

001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 package com.javacodegeeks.snippets.core; import java.util.Random; class Shape {      void drawShape() {      }      void eraseShape() {      } } class Circle extends Shape {      @Override      void drawShape() {    System.out.println( "Circle.draw()" );      }      @Override      void eraseShape() {    System.out.println( "Circle.erase()" );      } } class Square extends Shape {      @Override      void drawShape() {    System.out.println( "Square.draw()" );      }      @Override      void eraseShape() {    System.out.println( "Square.erase()" );      } } class Triangle extends Shape {      @Override      void drawShape() {    System.out.println( "Triangle.draw()" );      }      @Override      void eraseShape() {    System.out.println( "Triangle.erase()" );      } } // A "factory" that randomly creates shapes: class RandomShapeGenerator {      private Random rand = new Random();            //Choose randomly a circle, a squere or a triangle      public Shape next() {    switch (rand.nextInt( 3 )) { default : case 0 :      return new Circle(); case 1 :      return new Square(); case 2 :      return new Triangle();    }      } } public class Polymorphism {          private static RandomShapeGenerator gen = new RandomShapeGenerator();      public static void main(String[] args) {       //This is an array of references of the superclass Shape    Shape[] s = new Shape[ 9 ];       // Fill up the array with random shapes shapes:    for ( int i = 0 ; i < s.length; i++) { s[i] = gen.next();    }       //s[x].drawShape will call the specific drawShape function of whichever    //shape is s[x] and not the drawShape function of class Shape    //That's polymorphism.    for ( int i = 0 ; i < s.length; i++) { s[i].drawShape();    }      } }
Salida
Square.draw()
Square.draw()
Circle.draw()
Triangle.draw()
Triangle.draw()
Square.draw()
Circle.draw()
Circle.draw()
Square.draw()

3. Beneficios del polimorfismo

1. La sobrecarga de métodos permite acceder a métodos que realizan funciones similares o estrechamente relacionadas a través de un nombre común. Por ejemplo, un programa realiza operaciones en una matriz de números que pueden ser de tipo int, float o double. La sobrecarga de métodos le permite definir tres métodos con el mismo nombre y diferentes tipos de parámetros para manejar las operaciones de matriz.

2. La sobrecarga de métodos se puede implementar en constructores que permiten diferentes formas de inicializar objetos de una clase. Esto le permite definir múltiples constructores para manejar diferentes tipos de inicializaciones.

3 . La anulación de métodos permite que una subclase use todas las definiciones generales que proporciona una superclase y agrega definiciones especializadas a través de métodos anulados.

4. La anulación de métodos funciona junto con la herencia para permitir la reutilización de código de clases existentes sin necesidad de volver a compilar.

4. Ejemplo de Java de polimorfismo

En esta publicación, comenzamos con la definición de polimorfismo, cómo se puede lograr en Java utilizando la sobrecarga de métodos y la anulación de métodos. Entonces comprendimos claramente cómo podemos implementar la sobrecarga de métodos y la anulación de métodos mediante programación. Finalmente, terminamos nuestro tema comprendiendo los beneficios de usar polimorfismo.

5. Más artículos

  • Tutorial de Java para principiantes
  • La mejor manera de aprender programación Java en línea
  • Ejemplo de constructor Java
  • Tutorial de colecciones de Java
  • Ejemplo de mapa hash de Java

Este es un ejemplo de polimorfismo en java.class core java

Etiqueta Java