Sabe le a apostila não --’’
Tanto a Classe Abstrata como a Interface são “projetos” de classes e não podem ser instanciadas diretamente, só que a diferença entre elas é que na Classe Abstrata o programador do “projeto” pode definir o funcionamento de algumas funções, enquanto que na interface o programador só define as assinaturas.
Ex de Classe Abstrata
public abstract class ClasseAbstrata {
//definição da assinatura, sem implementação
public int calculaNumero(){
}
//definição da assinatura, com implementação
public boolean retornaFalse (){
return false;
}
}
Ex de Interface
public interface TesteInterface {
public void algumaCoisa(){
}
public boolean algumaCoisa2(){
}
}
Como você pode perceber, eu defini a implementação de uma das funções da minha classe abstrata (a quantidade de funções implementadas eu decido) enquanto que na interface eu não defini nada além das assinaturas de funções (na interface eu só posso fazer isso).
Para instanciar uma classe abstrata ou uma interface você deve criar uma classe que extende uma classe abstrata ou implementa uma interface, em ambos os casos você terá de definir o conteúdo das funções só que a diferença é que no caso da classe abstrata, se você sabe que determinada função foi implementada você pode deixar ela como está, ou utiliza-la em outra parte do código assim:
Ex de Classe que extende uma Classe Abstrata
CODE
[code]public class ExtensaoClasseAbstrata extends ClasseAbstrata{
public int calculaNumero(){
/Código aqui/
}
public boolean retornaFalso(){
// através do comando super(nomeMétodo) eu estou utilizando a implementação de um método da classe mãe (no caso a classe abstrata)
return super(retornaFalso());
}
}[/code]
Ex de Classe que implementa uma Interface
[code]public class ImplementaInterface implements TesteInterFace{
public void algumaCoisa(){
/*Código aqui*/
}
public boolean algumaCoisa2(){
/Código aqui/
}
}[/code]
Resumindo: Na classe abstrata, quem for implementar ela não é obrigado a implementar todos os métodos enquanto que na interface o programador é (mesmo que ele deixe a função em branco será contado como uma implementação).