Polimorfismo de Java
Polimorfismo de Java
En este tutorial, aprenderemos sobre el polimorfismo de Java y su implementación con la ayuda de ejemplos.
El polimorfismo es un concepto importante de la programación orientada a objetos. Simplemente significa más de una forma.
Es decir, una misma entidad (método u operador u objeto) puede realizar diferentes operaciones en diferentes escenarios.
Ejemplo:polimorfismo de Java
class Polygon {
// method to render a shape
public void render() {
System.out.println("Rendering Polygon...");
}
}
class Square extends Polygon {
// renders Square
public void render() {
System.out.println("Rendering Square...");
}
}
class Circle extends Polygon {
// renders circle
public void render() {
System.out.println("Rendering Circle...");
}
}
class Main {
public static void main(String[] args) {
// create an object of Square
Square s1 = new Square();
s1.render();
// create an object of Circle
Circle c1 = new Circle();
c1.render();
}
}
Salida
Rendering Square... Rendering Circle...
En el ejemplo anterior, hemos creado una superclase:Polygon y dos subclases:Cuadrado y Círculo . Note el uso del render()
método.
El propósito principal del render()
El método es renderizar la forma. Sin embargo, el proceso de renderizar un cuadrado es diferente al proceso de renderizar un círculo.
Por lo tanto, el render()
El método se comporta de manera diferente en diferentes clases. O podemos decir render()
es polimórfico.
¿Por qué polimorfismo?
El polimorfismo nos permite crear código consistente. En el ejemplo anterior, también podemos crear diferentes métodos:renderSquare()
y renderCircle()
para renderizar Cuadrado y Círculo , respectivamente.
Esto funcionará perfectamente. Sin embargo, para cada forma, necesitamos crear diferentes métodos. Hará que nuestro código sea inconsistente.
Para solucionar esto, el polimorfismo en Java nos permite crear un único método render()
que se comportará de manera diferente para diferentes formas.
Nota :El print()
El método es también un ejemplo de polimorfismo. Se usa para imprimir valores de diferentes tipos como char
, int
, string
, etc.
Podemos lograr polimorfismo en Java usando las siguientes formas:
- Anulación de métodos
- Sobrecarga de métodos
- Sobrecarga del operador
Anulación del método Java
Durante la herencia en Java, si el mismo método está presente tanto en la superclase como en la subclase. Luego, el método en la subclase anula el mismo método en la superclase. Esto se denomina anulación de métodos.
En este caso, el mismo método realizará una operación en la superclase y otra operación en la subclase. Por ejemplo,
Ejemplo 1:polimorfismo utilizando la anulación de métodos
class Language {
public void displayInfo() {
System.out.println("Common English Language");
}
}
class Java extends Language {
@Override
public void displayInfo() {
System.out.println("Java Programming Language");
}
}
class Main {
public static void main(String[] args) {
// create an object of Java class
Java j1 = new Java();
j1.displayInfo();
// create an object of Language class
Language l1 = new Language();
l1.displayInfo();
}
}
Salida :
Java Programming Language Common English Language
En el ejemplo anterior, hemos creado una superclase llamada Idioma y una subclase llamada Java . Aquí, el método displayInfo()
está presente en ambos Idioma y Java .
El uso de displayInfo()
es imprimir la información. Sin embargo, está imprimiendo información diferente en Idioma y Java .
Según el objeto utilizado para llamar al método, se imprime la información correspondiente.
Nota :El método que se llama se determina durante la ejecución del programa. Por lo tanto, la anulación de métodos es un polimorfismo en tiempo de ejecución .
2. Sobrecarga del método Java
En una clase de Java, podemos crear métodos con el mismo nombre si difieren en los parámetros. Por ejemplo,
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
Esto se conoce como sobrecarga de métodos en Java. Aquí, el mismo método realizará diferentes operaciones según el parámetro.
Ejemplo 3:Polimorfismo usando sobrecarga de métodos
class Pattern {
// method without parameter
public void display() {
for (int i = 0; i < 10; i++) {
System.out.print("*");
}
}
// method with single parameter
public void display(char symbol) {
for (int i = 0; i < 10; i++) {
System.out.print(symbol);
}
}
}
class Main {
public static void main(String[] args) {
Pattern d1 = new Pattern();
// call method without any argument
d1.display();
System.out.println("\n");
// call method with a single argument
d1.display('#');
}
}
Salida :
********** ##########
En el ejemplo anterior, hemos creado una clase llamada Patrón . La clase contiene un método llamado display()
que está sobrecargado.
// method with no arguments
display() {...}
// method with a single char type argument
display(char symbol) {...}
Aquí, la función principal de display()
es imprimir el patrón. Sin embargo, según los argumentos pasados, el método realiza diferentes operaciones:
- imprime un patrón de
*
, si no se pasa ningún argumento o - imprime el patrón del parámetro, si es un solo
char
se pasa el argumento de tipo.
Nota :El compilador determina el método que se llama. Por lo tanto, también se conoce como polimorfismo en tiempo de compilación.
3. Sobrecarga del operador Java
Algunos operadores en Java se comportan de manera diferente con diferentes operandos. Por ejemplo,
+
el operador está sobrecargado para realizar sumas numéricas y concatenaciones de cadenas, y- operadores como
&
,|
y!
están sobrecargados para operaciones lógicas y bit a bit.
Veamos cómo podemos lograr el polimorfismo utilizando la sobrecarga de operadores.
El +
El operador se utiliza para agregar dos entidades. Sin embargo, en Java, el +
el operador realiza dos operaciones.
1. Cuando +
se usa con números (enteros y números de coma flotante), realiza sumas matemáticas. Por ejemplo,
int a = 5;
int b = 6;
// + with numbers
int sum = a + b; // Output = 11
2. Cuando usamos el +
operador con cadenas, realizará la concatenación de cadenas (unir dos cadenas). Por ejemplo,
String first = "Java ";
String second = "Programming";
// + with strings
name = first + second; // Output = Java Programming
Aquí, podemos ver que el +
El operador está sobrecargado en Java para realizar dos operaciones:adición y concatenación .
Nota :En lenguajes como C++, podemos definir operadores para que funcionen de manera diferente para diferentes operandos. Sin embargo, Java no admite la sobrecarga de operadores definidos por el usuario.
Variables polimórficas
Una variable se llama polimórfica si se refiere a diferentes valores bajo diferentes condiciones.
Las variables de objeto (variables de instancia) representan el comportamiento de las variables polimórficas en Java. Es porque las variables de objeto de una clase pueden referirse a objetos de su clase así como a objetos de sus subclases.
Ejemplo:Variables polimórficas
class ProgrammingLanguage {
public void display() {
System.out.println("I am Programming Language.");
}
}
class Java extends ProgrammingLanguage {
@Override
public void display() {
System.out.println("I am Object-Oriented Programming Language.");
}
}
class Main {
public static void main(String[] args) {
// declare an object variable
ProgrammingLanguage pl;
// create object of ProgrammingLanguage
pl = new ProgrammingLanguage();
pl.display();
// create object of Java class
pl = new Java();
pl.display();
}
}
Salida :
I am Programming Language. I am Object-Oriented Programming Language.
En el ejemplo anterior, hemos creado una variable de objeto pl del Lenguaje de Programación clase. Aquí, pl es una variable polimórfica. Esto se debe a que,
- En declaración
pl = new ProgrammingLanguage()
, pl referirse al objeto del ProgrammingLanguage clase. - Y, en la declaración
pl = new Java()
, pl referirse al objeto de Java clase.
Este es un ejemplo de upcasting en Java.
Java
- Operadores Java
- Interfaz Java
- Prueba de Java con recursos
- Anotaciones Java
- Tipos de anotación de Java
- Método String Length () en Java:cómo encontrar con el ejemplo
- Método Java String indexOf() con subcadena y ejemplos
- Método Java String charAt() con ejemplo
- Java String termina con () método con ejemplo
- Método Java String replace(), replaceAll() y replaceFirst()
- Java - Anulación