Boa tarde a todos.
Será que eu não percebi, ou a dúvida acima ficou sem resposta :?:
Se ficou, então lá vai.
Interfaces não podem ser instanciadas porque seus métodos são puramente abstratos (Sem implementação).
Métodos abstratos são métodos que não são definidos (implementados) dentro da Interface ou até dentro de uma classe Abstrata.
Detalhe, não confunda Interface com Classes Abstratas, a diferença entre ambas é que Interface é totalmente abstrata, ou seja, todos os seus métodos deverão ser abstratos, os seus atributos deverão ser constantes (declarados com o modificador “Final”). Já as classes Abstratas são parcialmente abastratas, ou seja, ela pode ter métodos abstratos e métodos implementados, ou até, pasmem, nenhum método abstrato :!: :!: :!:
Vamos exemplificar melhor tanto a Interface quanto a Classe Abstrata.
// Interface
public interface ComportamentoAnimal {
void idAnimal();
void alimentar();
void falar();
}
// Classe Abstrata
public abstract class Animal {
public void andar(){
System.out.println("Estou andando");
}
public void olhar(){
System.out.println("Estou olhando ");
}
public void ouvir(){
System.out.println("Estou ouvindo ");
}
}
// Classes herdadas
public class Leao extends Animal implements ComportamentoAnimal {
public void idAnimal() {
System.out.println("Eu sou o Leão");
}
public void falar() {
System.out.println("Estou rugindo");
}
public void alimentar() {
System.out.println("Estou comendo carne");
}
}
public class Porco extends Animal implements ComportamentoAnimal {
public void idAnimal(){
System.out.println("Eu sou o Porco");
}
public void alimentar(){
System.out.println("Estou comendo ração");
}
public void falar(){
System.out.println("Estou rosnando");
}
}
public class Galinha extends Animal implements ComportamentoAnimal {
public void idAnimal(){
System.out.println("Eu sou a Galinha");
}
public void alimentar(){
System.out.println("Estou comendo milho");
}
public void falar(){
System.out.println("Estou piando");
}
}
public class Vaca extends Animal implements ComportamentoAnimal {
public void idAnimal(){
System.out.println("Eu sou a Vaca");
}
public void alimentar(){
System.out.println("Estou comendo capim");
}
public void falar(){
System.out.println("Estou mugindo");
}
}
public class Cachorro extends Animal implements ComportamentoAnimal {
public void idAnimal(){
System.out.println("Eu sou o cachorro");
}
public void alimentar(){
System.out.println("Estou comendo ração");
}
public void falar(){
System.out.println("Estou latindo");
}
}
Agora na classe principal, vamos executar o programa assim:
public class Main {
public static void main(String[] args) {
Leao leao = new Leao();
leao.idAnimal();
leao.andar();
leao.olhar();
leao.ouvir();
leao.alimentar();
leao.falar();
Porco porco = new Porco();
porco.idAnimal();
porco.andar();
porco.ouvir();
porco.alimentar();
porco.falar();
Galinha galinha = new Galinha();
galinha.idAnimal();
galinha.andar();
galinha.ouvir();
galinha.alimentar();
galinha.falar();
Vaca vaca = new Vaca();
vaca.idAnimal();
vaca.andar();
vaca.olhar();
vaca.ouvir();
vaca.alimentar();
vaca.falar();
Cachorro cachorro = new Cachorro();
cachorro.idAnimal();
cachorro.andar();
cachorro.olhar();
cachorro.ouvir();
cachorro.alimentar();
cachorro.falar();
}
}
Repare uma coisa: A Classe Abstrata não possui nenhum método abstrato, mas porque então declará-la como Abstrata :?: Simples, para impedir que a mesma seja instanciada, pois sua instanciação por si só não faria sentido, onde voce só acessaria os métodos “Olhar, Ouvir e Andar”, já os métodos do comportamento animal que não pode ser definidos na hora, definimos como regra obrigatória na Interface, pois este é o papel da Interface, obrigar uma classe a implementar os seus métodos como se fosse uma espécie de contrato.
Repare também que nas sub-classes (Leão, Porco e etc.) eu não precisei implementar os métodos da classe Abstrata Animal, isto pois esta é mais uma diferença entre Interface e Classes Abstratas, na Classe Abstrata há herança, na Interface não.
Voce pode também implementar métodos abstratos em Classes Abstratas, pois foi para isso também que elas foram criadas.