📌 Programación Orientada a Objetos (POO) Avanzada.
🔹 Encapsulación
private String nombre;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
🔹 Herencia
class Animal {
void hacerSonido() {
System.out.println("Sonido");
}
}
class Perro extends Animal {
void ladrar() {
System.out.println("Guau");
}
}
🔹 Polimorfismo
class Animal {
void sonido() {
System.out.println("Sonido genérico");
}
}
class Gato extends Animal {
@Override
void sonido() {
System.out.println("Miau");
}
}
🔹 Abstracción
abstract class Figura {
abstract double calcularArea();
}
interface Volador {
void volar();
}
Proteger datos usando private y métodos get y set.
class Persona {private String nombre;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
👉 Evita que otros modifiquen datos directamente.
🔹 Herencia
Una clase hereda de otra.
class Animal {
void hacerSonido() {
System.out.println("Sonido");
}
}
class Perro extends Animal {
void ladrar() {
System.out.println("Guau");
}
}
🔹 Polimorfismo
Un mismo método, distintos comportamientos.
class Animal {
void sonido() {
System.out.println("Sonido genérico");
}
}
class Gato extends Animal {
@Override
void sonido() {
System.out.println("Miau");
}
}
🔹 Abstracción
Clase abstracta
abstract class Figura {
abstract double calcularArea();
}
Interface
interface Volador {
void volar();
}
📌 Colecciones (Collections Framework).
En vez de arrays, se usan estructuras dinámicas.
🔹 ArrayList
import java.util.ArrayList;
ArrayList<String> nombres = new ArrayList<>();
nombres.add("Ana");
nombres.add("Luis");
🔹 HashMap
import java.util.HashMap;
HashMap<String, Integer> edades = new HashMap<>();
edades.put("Ana", 25);
👉 Muy usado en backend y sistemas grandes.
📌 Manejo de Excepciones.
Control de errores con try-catch.
try {
int x = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Error matemático");
} finally {
System.out.println("Fin del proceso");
}
También puedes crear tus propias excepciones.
📌 Archivos (File I/O).
Leer y escribir archivos.
import java.io.FileWriter;
FileWriter writer = new FileWriter("archivo.txt");
writer.write("Hola mundo");
writer.close();
📌 Programación Genérica (Generics).
Permite usar tipos dinámicos seguros.
ArrayList<Integer> numeros = new ArrayList<>();
Evita errores de tipo en tiempo de ejecución.
📌 Programación Funcional (Java 8+).
🔹 Lambda
nombres.forEach(nombre -> System.out.println(nombre));
🔹 Streams
nombres.stream()
.filter(n -> n.startsWith("A"))
.forEach(System.out::println);
nombres.forEach(nombre -> System.out.println(nombre));
🔹 Streams
nombres.stream()
.filter(n -> n.startsWith("A"))
.forEach(System.out::println);
Muy importante en desarrollo moderno.
📌 Paquetes (Packages).
Organizan el código.
package com.miempresa.proyecto;
📌 Modificadores de Acceso.
Modificador Acceso
public Todos
private Solo clase
protected Paquete + herencia
default Solo paquete
public Todos
private Solo clase
protected Paquete + herencia
default Solo paquete
📌 Enumeraciones (enum).
enum Dia {
LUNES, MARTES, MIERCOLES
}
LUNES, MARTES, MIERCOLES
}
📌 Hilos (Multithreading básico).
class MiHilo extends Thread {
public void run() {
System.out.println("Hilo ejecutándose");
}
}
Runnable r = () -> System.out.println("Hola");
new Thread(r).start();
public void run() {
System.out.println("Hilo ejecutándose");
}
}
O usando Runnable:
Runnable r = () -> System.out.println("Hola");
new Thread(r).start();
📌 En resumen.
Un programador intermedio en Java domina:
✔ POO avanzada
✔ Interfaces y clases abstractas
✔ Collections
✔ Excepciones
✔ Archivos
✔ Generics
✔ Lambda y Streams
✔ Multithreading básico