En esta sección exploraremos conceptos avanzados de la Programación Orientada a Objetos (POO) en Java, como herencia múltiple mediante interfaces, clases internas, genéricos y el uso de patrones de diseño básicos.
Java no permite herencia múltiple con clases, pero puedes lograrlo utilizando interfaces. Una clase puede implementar múltiples interfaces.
public interface Volador {
void volar();
}
public interface Nadador {
void nadar();
}
public class Pato implements Volador, Nadador {
@Override
public void volar() {
System.out.println("El pato está volando.");
}
@Override
public void nadar() {
System.out.println("El pato está nadando.");
}
}
public class Main {
public static void main(String[] args) {
Pato pato = new Pato();
pato.volar();
pato.nadar();
}
}
Una clase interna es una clase definida dentro de otra clase. Estas permiten organizar mejor el código y encapsular funcionalidades relacionadas.
public class Externa {
class Interna {
void mostrar() {
System.out.println("Soy una clase interna.");
}
}
public static void main(String[] args) {
Externa externa = new Externa();
Externa.Interna interna = externa.new Interna();
interna.mostrar();
}
}
public class Main {
public static void main(String[] args) {
Runnable tarea = new Runnable() {
@Override
public void run() {
System.out.println("Clase anónima ejecutada.");
}
};
tarea.run();
}
}
Los genéricos permiten escribir clases y métodos que pueden manejar cualquier tipo de datos, proporcionando mayor flexibilidad y seguridad en tiempo de compilación.
public class Caja<T> {
private T contenido;
public void guardar(T contenido) {
this.contenido = contenido;
}
public T obtener() {
return contenido;
}
public static void main(String[] args) {
Caja<String> caja = new Caja<>();
caja.guardar("Hola, mundo");
System.out.println(caja.obtener());
}
}