O Polimorfismo permite que diferentes classes respondam de maneiras diferentes a um mesmo método, mantendo uma estrutura comum.

É como pedir para vários ninjas usarem seu melhor jutsu — cada um usa o seu, mas todos atendem ao mesmo comando "usarJutsu()". 🥷


🔄 1. O mesmo comando, várias formas (ideia principal)

Polimorfismo significa literalmente:

"Muitas formas", ou seja, um único método pode ter múltiplas implementações dependendo do objeto que o chama.


🧠 TIPOS DE POLIMORFISMO

🟦 1. Polimorfismo de Sobrescrita (Runtime)

➡️ Ocorre quando subclasses reescrevem um método da superclasse.

➡️ É decidido em tempo de execução.

Exemplo:

Ninja n1 = new Uzumaki();
Ninja n2 = new Uchiha();

n1.usarJutsu(); // Rasengan
n2.usarJutsu(); // Chidori


🟩 2. Polimorfismo de Sobrecarga (Compile Time)

➡️ Métodos com o mesmo nome, mas parâmetros diferentes.

➡️ Acontece em tempo de compilação.

Exemplo:

void atacar() {}
void atacar(String jutsu) {}
void atacar(String jutsu, int poder) {}