Quando eu defino uma classe abstrata, todos seu métodos serão abstratos? ou somente aqueles que a implementação for diferente para cada filha da classe abstrata?
Quando eu defino uma classe abstrata, todos seu métodos serão abstratos? ou somente aqueles que a implementação for diferente para cada filha da classe abstrata?
Boa tarde Lucas, não são abstratos se você não colocar a palavra abstract. Então uma classe abstrata por de ter métodos abstratos e concretos, independente das classes que serão suas filhas, por exemplo:
public abstract class Teste {
public void m1() {
}
public abstract void m2();
}
E um método tem que ser abstrato quando? Quando a implementação dele for diferente em cada um de suas filhas?
Olá Lucas,
Ao declamar um método abstrato, consequentemente a minha classe também deve ser abstrata, mas isso não quer dizer que todos os métodos que existirem dentro dessa classe também deverão ser abstratos, pode existir métodos normais.
Utilizamos métodos e classes abstratas quando queremos fornecer um modelo de classe, mas em determinados comportamentos queremos que cada uma das classes filhas quer herdarem, implemente o seu. Exemplo:
public abstract class Funcionario {
protected String nome;
protected String cpf;
protected int senha;
public abstract double calculaBonus();
public boolean autentica(int senha) {
if (this.senha == senha) {
System.out.println("Acesso Permitido!");
return true;
} else {
System.out.println("Acesso Negado!");
return false;
}
}
}
Essa classe seria o modelo para qualquer tipo de funcionário, sela ele Gerente, Secretária ou Diretor. Todos herdam de Funcionario
e vão herdar seus atributos e métodos, mas por possuir um método abstrato, todo mundo que implementar ela deverá sobrescrever double calculaBonus()
, já que o bônus é calculado de forma diferente pra cada tipo de funcionário. Já em relação a forma de autenticar nossos funcionários é a mesma independente de qual tipo de funcionário, então podemos deixar esse método na classe abstrato, mas sem que ele seja abstrato também.
Espero ter ajudado. Bons estudos.
Ajudou sim, obrigado guilherme e lucas