J'y pensais et j'avais des doutes.
Lorsque je déclare une interface, par exemple:
public interface MyInterface
{
public void method1();
public void method2();
}
Ces méthodes d'interface pourraient-elles être considérées comme abstraites? Ce que je veux dire, c'est que le concept d'une méthode abstraite est:
Une méthode abstraite est une méthode qui est déclarée, mais ne contient aucune implémentation.
Alors, ces méthodes pourraient-elles être considérées comme abstraites? Ce ne sont pas des méthodes abstraites "pures" car je n'utilise pas le abstract
mot, mais conceptuellement, on dirait qu'elles le sont.
Que pouvez-vous m'en dire?
Merci.
Réponses:
Une interface est comme une classe "purement" abstraite. La classe et toutes ses méthodes sont abstraites. Une classe abstraite peut avoir implémenté des méthodes mais la classe elle-même ne peut pas être instanciée (utile pour l'héritage et pour suivre DRY).
Pour une interface, puisqu'il n'y a pas du tout d'implémentation, elles sont utiles à leur destination: un contrat. Si vous implémentez l'interface, vous devez implémenter les méthodes dans l'interface.
La différence est donc qu'une classe abstraite peut avoir implémenté des méthodes alors qu'une interface ne le peut pas.
La raison pour laquelle ils sont séparés est qu'une classe peut implémenter plusieurs interfaces. Java et C # restreignent une classe à inhérente à une seule classe parent. Certains langages vous permettent d'hériter de plusieurs classes et vous pouvez accomplir le travail d'une interface via une classe abstraite "purement". Mais l'héritage multiple a ses problèmes, à savoir le redoutable problème du diamant
la source
J'ai trouvé une réponse utile ici: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
la source
Les classes abstraites peuvent avoir des méthodes abstraites.
Les interfaces ne peuvent avoir que des méthodes abstraites.
method1()
etmethod2()
dans votre exemple sont des méthodes abstraites.la source
La différence ici est que les classes abstraites peuvent contenir des détails d'implémentation, bien qu'elles ne puissent pas être instanciées par elles-mêmes. Alors qu'une interface n'est qu'un modèle pour une classe
la source
Ainsi, dans une sous-classe, la méthode abstraite héritée peut redevenir abstraite sans implémentation, tandis que si une classe implémente une interface, sa méthode doit être implémentée.
la source
Les classes d'interface n'ont pas de méthodes abstraites. Ils n'ont aucune méthode. Ils ont juste une liste de méthodes qu'une autre classe devrait implémenter pour pouvoir se conformer à l'interface. Dans votre exemple, il n'y a aucune méthode method1 et aucune méthode method2 tant que quelqu'un n'ajoute pas ces méthodes à une classe.
la source