Orientação a Objetos é fundamental para escrever código organizado, reutilizável e fácil de manter. Vamos explorar os pilares da OOP: Encapsulamento, Herança e Polimorfismo, usando exemplos práticos do universo Naruto! 🥷


🔒 Encapsulamento

Esconde os detalhes internos do objeto e expõe apenas o necessário, controlando o acesso via modificadores como private, protected e public.


// Exemplo de Encapsulamento com Ninja
public class Ninja {
    private String nome;
    private int nivelChakra;

    public Ninja(String nome, int nivelChakraInicial) {
        this.nome = nome;
        this.nivelChakra = nivelChakraInicial;
    }

    public void treinar(int horas) {
        if (horas > 0) {
            nivelChakra += horas * 10; // Cada hora de treino aumenta o chakra
        }
    }

    public int getNivelChakra() {
        return nivelChakra;
    }

    public String getNome() {
        return nome;
    }
}


🌳 Herança

Permite que uma classe herde atributos e métodos de outra, facilitando a reutilização de código e a criação de hierarquias.


// Exemplo de Herança com Ninjas
class Ninja {
    private String nome;

    public Ninja(String nome) {
        this.nome = nome;
    }

    public void atacar() {
        System.out.println(nome + " realiza um ataque básico!");
    }

    public String getNome() {
        return nome;
    }
}

class NinjaDeTaijutsu extends Ninja {
    public NinjaDeTaijutsu(String nome) {
        super(nome);
    }

    @Override
    public void atacar() {
        System.out.println(getNome() + " realiza um poderoso golpe de Taijutsu!");
    }
}

class NinjaDeNinjutsu extends Ninja {
    public NinjaDeNinjutsu(String nome) {
        super(nome);
    }

    @Override
    public void atacar() {
        System.out.println(getNome() + " lança um Jutsu impressionante!");
    }
}


🔄 Polimorfismo

Permite que objetos de subclasses sejam tratados como objetos da superclasse, chamando o método correto em tempo de execução.


// Exemplo de Polimorfismo no Campo de Batalha
public class CampoDeBatalha {
    public static void main(String[] args) {
        Ninja naruto = new NinjaDeNinjutsu("Naruto");
        Ninja rockLee = new NinjaDeTaijutsu("Rock Lee");

        realizarAtaque(naruto);  // Naruto lança um Jutsu impressionante!
        realizarAtaque(rockLee); // Rock Lee realiza um poderoso golpe de Taijutsu!
    }

    public static void realizarAtaque(Ninja ninja) {
        ninja.atacar(); // Método chamado de forma polimórfica
    }
}


📚 Links para aprofundar