Classe Abstrata versus Interface

Posso dizer que umas das diferenças entre Classe Abstrata e Interface seria que a classe abstrata podemos implementar métodos e podemos definir métodos abstratos e interface só tem métodos abstratos ?
Os métodos implementados na super-classe abstrata precisa ser implementados também na sub-classe ?

Atc,
Fernando.

Diferença entre interface e classe abstrata:

A classe abstrata existe somente para ser extendida, ela passa a ser uma classe generica que fornecera metodos genericos que outras subclasses concretas da mesma arvore de herança irao sobrepor, fornecendo um codigo especifico para estes metodos. Ou seja o metodo abstrato em um subclasse concreta deve ser sobreposto.
Uma classe abstrata pode conter metodos que nao seja abstrato, porem se um metodo for declarado como abstrato, toda a classe sera abstrata, vc devera marcar a classe como abstrata.

Interface é uma classe 100% abstrata, todos os seus metodos sao abstratos, e uma classe podera implementar varias interfaces.

E a diferença de uma classe abstrata e de uma interface, e que a interface pode ser implementada por qualquer classe mesmo vindo de uma arvore de herança completamente diferente. Ja a classe abstrata so pode ser extendida por classes que fazem parte de uma mesma arvore herança.

Isso e so um resumo sobre este assunto, mas essa e uma grande diferença entre as duas , mas existem outras coisas que vc deve pesquisar…o assunto e um pouco extenso…

Ate mais…

Obrigado Robson.

Complementando o post do Robson, além da diferença básica exposta podemos pensar que uma classe abstrata define algo… Abstrato :stuck_out_tongue:
Por exemplo, podemos ter uma classe abstrata Carro que contém os métodos básicos de todo carro, como “darPartida”, “frear” e assim vai, mas ela pode conter métodos abstratos que dependem da implementação, como “dispararAlarme” e diversos carros tem tipos de alarmes diferentes, etc, as classes que forem subclasses de “Carro” definem qual carro ele é, por exemplo você pode criar uma classe “Gol” e definir coisas específicas de um Gol.

Enquanto que as interfaces definem coisas que a classe pode realizar, um “Carro” pode implementar uma interface “Acelerável” que define que ele pode ser acelerado, assim vai…

Dei um exemplo rápido e não muito bem elaborado, mas a diferença básica é: uma classe abstrata define algo abstrato que será mais refinado em subclasses, interfaces definem funções que determinada classe pode realizar.