Vamos construir:
NinjaUzumaki, Uchiha, Hyugaabstract class Ninja {
protected String nome;
protected String aldeia;
public Ninja(String nome, String aldeia) {
this.nome = nome;
this.aldeia = aldeia;
}
// Método abstrato → obrigatório para subclasses
abstract void usarJutsu();
// Método concreto → comportamento comum
public void seApresentar() {
System.out.println("Sou " + nome + " da aldeia " + aldeia + ".");
}
}
Ninja não pode ser instanciado → é um molde genérico.usarJutsu().seApresentar() já tem implementação → reaproveitado por todas as subclasses.class Uzumaki extends Ninja {
public Uzumaki(String nome) {
super(nome, "Konoha");
}
@Override
void usarJutsu() {
System.out.println(nome + " usa o Rasengan!");
}
}
class Uchiha extends Ninja {
public Uchiha(String nome) {
super(nome, "Konoha");
}
@Override
void usarJutsu() {
System.out.println(nome + " ativa o Sharingan e usa Chidori!");
}
}