olimorfismo paramétrico
Antes habíamos visto un ejemplo clásico de polimorfismo basado en sobrecarga. Pero
veamos ahora un ejemplo Paramétrico. Es importante entender que la conversión
automática sólo se aplican si no hay ninguna coincidencia directa entre un
parámetro y argumento.
Aquí el método demo() se sobrecarga 3 veces: el primer método tiene 1 parámetro
int, el segundo método tiene 2 parámetros int y el tercero tiene un parámetro
doble. Por lo que para lidiar con esta variedad el método que se llamará está
determinado por los argumentos que pasamos al llamar a los métodos. Esto sucede en
tiempo de compilación en tiempo de ejecución, por lo que este tipo de polimorfismo
se conoce también como polimorfismo en tiempo de compilación.
class Overload
{
void demo (int a)
{
System.out.println ("a: " + a);
}
void demo (int a, int b)
{
System.out.println ("a and b: " + a + "," + b);
}
double demo(double a) {
System.out.println("double a: " + a);
return a*a;
}
}
class MethodOverloading
{
public static void main (String args [])
{
Overload Obj = new Overload();
double result;
Obj .demo(10);
Obj .demo(10, 20);
result = Obj .demo(5.5);
System.out.println("O/P : " + result);
}
}
Salida de datos:
a: 10
a and b: 10,20
double a: 5.5
O/P : 30.25
Polimorfismo de inclusión
La habilidad para redefinir por completo el método de una superclase en una
subclase es lo que se conoce como polimorfismo de inclusión (o redefinición).
En él, una subclase define un método que existe en una superclase con una lista de
argumentos (si se define otra lista de argumentos, estaríamos haciendo sobrecarga y
no redefinición).
Un ejemplo muy básico en donde la clase Bishop sobreescribe el método move. Esto es
el polimorfismo de inclusión.
abstract class Piece{
public abstract void move(byte X, byte Y);
}
class Bishop extends Piece{
@Override
public void move(byte X, byte Y){
}
}