Inteface vs Classe abrastata?

Acredito que entendí o conceito dos dois (basicamente), mas realmente não consigo enxergar as diferenças…

Ex: os dois tem métodos sem corpo;
na Interface obrigatóriamente tem de implementar as assinaturas do métodos? Não…
Já na class abstrata a mesma coisa… daí vem outras coisas…

Corrijam me por favor se tiver algo errado…
AS

http://www.guj.com.br/posts/list/141957.java#764777

Bom eu acho que uma diferença é: Java não tem herança multipla. Para usar uma classe abstrata você deve usar extends. Então só da pra usar uma. Para usar uma interface, você usa implements, que permite várias.

Ao meu ver, é essa a diferença… Pode haver mais

A principal diferença além da herança multipla já citada

Uma classe abstract pode conter implementação de alguma coisa, ou seja você pode possuir metodos concretos, com corpo.
Em uma interce só podem existir metodos sem corpo.

Então… é quase isso…
Classe abstrata tem método com/sem corpo, os que não tiverem corpo devem obrigatoriamente ter a palavra reservada abstract e os que tiverem corpo não pode ter o abstract.
Interface realmente tem métodos sem cabeçalhos, todas as classes (exceto as abstratas) que implementa essa interface deve ter o mesmo cabeçalho da interface (existe algumas particularidades mas essa definição é o suficiente por hora).

Você não pode instanciar classes abstratas…

Na Interface você pode herdar varias Interfaces…

Quando você herda uma classe abstrata só é obrigado implementar seus metodos abstratos na subclasse, nas outras subclasses é opcional…

A Interface ajuda o polimorfismo…

Tem muito mais, mais agora não estou me recordando.

Se eu estiver errado que alguem me corrija por favor…

xD~~

E não necessariamente em classes abstratas, seus métodos precisam ser abstratos, ou seja, eles podem ter uma implementação.
Sem contar que na classe abstrata vc pode ter atributos…

mas na interface vc tbm pode ter atributos… mas eles serão static, final e public por definição

Pois é, mas no caso de eu querer atributos com valor diferente para cada objeto, em interface não daria.

Com certeza não daria, não é possível instanciar interface…

Boa noite Pessoal.

Existe também outra diferença entre Interface e Classe Abstrata não mencionada aqui.

Uma classe Abstrata herda (extende) da classe Object, ou seja, ela tem uma hierarquia de herança definida, e esta é a razão de não se poder fazer herança múltipla com classes Abstratas.

Já a Interface não tem hierarquia de herança, ou melhor, não há herança definida em uma Interface, e por esta razão voce pode implementar várias interfaces em uma classe,

Outra coisa também é que ninguém notou, voce pode declarar uma classe como Abstrata sem que haja métodos abstratos nela. Heinnnnnn :!: :!: :!: Como é que é :?: :?: :?:

Isto mesmo, tem desenvolvedores, que declaram classes Abstratas, só para obrigar a não instanciá-las, simplesmente para isso, apesar de que isto não seja uma boa prática de POO, eu não recomendo fazer isto.