Java SE, Java Web Component Developer,
Java Business Component Developer,
Java Enterprise Architect, Spring, etc.
Personalmente dedico al autoestudio:
UtilityClass.foo(2, "bar");
public class Punto {
private final int x;
private final int y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
public class PuntoColoreado {
private final Punto punto; // composición
private final Color color;
public PuntoColoreado(Punto punto, Color color) {
this.punto = punto;
this.color = color;
}
public int getX() {
return punto.getX(); // delegación
}
public int getY() {
return punto.getY(); // delegación
}
public Color getColor() {
return color;
}
}
List<String> datos = new ArrayList<>();
public T foo(List<T> datos) {
// código
}
A foo() no le interesa qué tipo de lista le den, siempre y cuando sea una lista.
El método funciona con un ArrayList o un LinkedList, ¡incluso con implementación que aún no hayan sido inventadas!
Quién llame a foo()
escoge la implementación.
public List<T> otroFoo(/* parámetros */) {
// código
}
El que llame a foo() recibe una lista, simplemente no sabe cuál. ¡No le debe interesar!
foo() es libre de cambiar la implementación y ningún código se ve afectado por la decisión
class Vehículo {
public void arrancar() {
System.out.println("RRRRM!");
}
}
class VehículoModificado extends Vehículo {
@Override
public void arrancar() {
System.out.println("ZASZZ!");
}
}
Aca NO hay polimorfismo
class ControlRemoto {
public static void arrancar(Vehículo vehículo) {
vehículo.arrancar();
}
}
* * *
ControlRemoto.arrancar(new Vehículo()); // imprime "RRRRM!"
ControlRemoto.arrancar(new VehículoModificado()); // imprime "ZASZZ!"
¿Dónde está el polimorfismo?