Eu estava pensando sobre isso e tinha algumas dúvidas.
Quando declaro uma interface, por exemplo:
public interface MyInterface
{
public void method1();
public void method2();
}
Esses métodos de interface poderiam ser considerados abstratos? O que quero dizer é que o conceito de um método abstrato é:
Um método abstrato é um método declarado, mas não contém implementação.
Então, esses métodos poderiam ser considerados abstratos? Eles não são métodos abstratos "puros", como eu não estou usando a abstract
palavra, mas conceitualmente, parece que eles são.
O que você pode me falar sobre isso?
Obrigado.
Respostas:
Uma interface é como uma classe abstrata "puramente". A classe e todos os seus métodos são abstratos. Uma classe abstrata pode ter implementado métodos, mas a própria classe não pode ser instanciada (útil para herança e após DRY).
Para uma interface, como não há nenhuma implementação, elas são úteis para seus propósitos: um contrato. Se você implementar a interface, deverá implementar os métodos na interface.
Portanto, a diferença é que uma classe abstrata pode ter implementado métodos, enquanto uma interface não.
A razão pela qual eles são separados é para que uma classe possa implementar várias interfaces. Java e C # restringem uma classe a inerente a uma única classe pai. Alguns idiomas permitem herdar de várias classes e você pode realizar o trabalho de uma interface por meio de uma classe abstrata "puramente". Mas a herança múltipla tem seus problemas, a saber, o temido Problema do Diamante
fonte
Encontrei uma resposta útil aqui: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
fonte
Classes abstratas podem ter métodos abstratos.
As interfaces podem ter apenas métodos abstratos.
method1()
emethod2()
no seu exemplo são métodos abstratos.fonte
A diferença aqui é que as classes abstratas podem conter detalhes de implementação, embora não possam ser instanciadas por elas mesmas. Enquanto uma interface é apenas um modelo para uma classe
fonte
Portanto, em uma subclasse, o método abstrato herdado pode novamente ser abstrato sem implementação, enquanto que se uma classe implementa uma interface, seu método deve ser implementado.
fonte
As classes de interface não têm métodos abstratos. Eles não têm nenhum método. Eles apenas têm uma lista de métodos que outra classe teria que implementar para poder se adaptar à interface. No seu exemplo, não há método method1 e método method2 até que alguém adicione esses métodos a uma classe.
fonte