Carlos Obregón
Java Champion with 15 years of experience in software programming
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?
By Carlos Obregón