c’est peut-être la question la plus posée dans toutes les interviews liées au développement de logiciels ou à l’assurance qualité des logiciels. J’ai vu de mon expérience que souvent beaucoup d’entre nous se confondent ou oublient la définition et l’utilisation des classes abstraites et des interfaces. Donc, je veux le rendre le plus facile pour que personne n’ait plus jamais de problèmes avec ça.
La classe abstraite et les interfaces sont deux pivots très essentiels dans le concept de Programmation Orientée Objet.,
Au début, je vais expliquer la classe abstraite et son utilisation, et plus tard, nous allons passer aux Interfaces.
La classe abstraite n’a rien de spécial à regarder lorsque vous voulez différencier avec une classe régulière. Mais il a des méthodes qui ne sont pas mises en œuvre, ou seulement déclarées, non définies. Dans ce cas, toutes ces méthodes et la classe elle-même sont renommées avec le mot-clé « abstract”.
Une classe abstraite peut avoir un ou plusieurs nombres de méthodes non implémentées.,
comme une classe abstraite n’est pas appropriée, ou n’a pas de méthodes idéalement définies par rapport à une classe régulière, les classes abstraites ne peuvent donc pas être instanciées, cela signifie que nous ne pouvons pas créer d’objets directs de classes abstraites.
Les classes qui héritent/étendent cette classe abstraite doivent implémenter/définir toutes les méthodes abstraites de la classe abstraite parent.
Si une classe ne parvient pas à définir toutes les méthodes abstraites, cette classe devient aussi une classe abstraite.,
utilisation (une étude de cas imaginaire):
supposons, en 1995, que vous ayez conçu une classe de voiture qui avait une fonctionnalité supplémentaire-elle pouvait voler. Vous avez très bien conçu la classe car, toutes vos méthodes étaient très standard et efficaces, mais à l’époque, vous saviez qu’il était tout à fait impossible d’implémenter la méthode carFlying (). Donc, vous venez de garder la méthode carFlying() vide, ou non appliquée (Maintenant vous savez que c’est une méthode abstraite ainsi qu’une classe!).,
Aujourd’hui, je veux mettre en œuvre cette voiture volante que vous avez déjà conçue et dont la technologie n’est plus impossible. La voiture que je vais construire a toutes les fonctionnalités similaires à votre voiture, et en plus elle peut voler. Alors, que puis-je faire, c’est que je peux simplement hériter (« extends” – pour Java) de votre classe abstraite et que je dois définir/implémenter cette méthode abstraite carFlying (). ici vous allez! notre voiture volante est prête à rouler.
ainsi, chaque fois que nous avons des caractéristiques ou un comportement communs entre divers objets, nous pouvons créer une classe abstraite générale avec cette fonctionnalité en tant que méthode implémentée., Mais ces objets peuvent avoir des comportements distincts, dans ce cas, nous déclarerons une méthode abstraite et implémenterons ces méthodes abstraites différemment selon les besoins de l’objet.
Exemple de Classe Abstraite:
encore une Fois, prenons un exemple, un groupe de lutteurs obtenir la même quantité d’argent par heure pour jouer. mais ils ont une musique de thème différente et une stratégie de combat de finition. Nous pouvons donc garder le mode de paiement identique pour tous et le faire implémenter dans une classe nommée Wrestler., déclarons les méthodes themeMusic() et finisher() comme abstraites car ces deux doivent être implémentées différemment pour différents objets dans d’autres classes qui héritent de notre classe Wrestler Abstract.
et le principal.java:
Interface:
Si vous avez bien parcouru la partie supérieure de ce tutoriel, la compréhension de l’interface va être très facile pour vous.
Interface n’est pas une classe, c’est juste une interface. Il a quelques méthodes sans corps à l’intérieur, juste la signature de la méthode (ce sont essentiellement des méthodes abstraites!,), et peut avoir des variables finales et statiques. Et, une classe typique « implémente » des interfaces, pas « étend ».
Plusieurs interfaces peuvent être implémentées (généralement héritées) à la fois.
Les classes qui héritent/implémentent les interfaces, doivent définir toutes les méthodes abstraites de l’interface.
Les méthodes à l’intérieur des interfaces sont par défaut public, void et abstract.
l’interface est une sorte d’héritage multiple dans le langage de programmation Java.
nous ne pouvons pas instancier les interfaces aussi comme les classes abstraites., Parce qu’ils sont une entité incomplète et ne devraient pas être autorisés à être réalisés. Mais parfois, une activité comme l’instanciation peut être applicable à l’aide de la classe interne anonyme. Ce n’est pas notre ordre du jour ici aujourd’hui.
utilisation de L’Interface:
Les Interfaces permettent de gagner du temps de codage. Il peut contenir des variables statiques et finales accessibles globalement. et certaines méthodes qui sont abstraites et facilement disponibles pour une utilisation ultérieure à tout moment à quiconque implémente l’interface.,
exemple D’Interface:
dans l’exemple ci-dessus de la classe abstraite, nous avons vu qu’une méthode était la même pour tous ceux qui avaient un corps à l’intérieur de la classe abstraite et que d’autres méthodes étaient abstraites. mais pour les Interfaces, toutes les méthodes ne sont plus que signature. La classe StoneCold implémente L’interface Wrestler et en définit les trois méthodes abstraites en fonction de ses besoins.
Cette fois, différents lutteurs obtiennent une quantité d’argent différente par heure. Donc, c’est le plus pratique de mettre la même méthode qu’abstraite et de la définir ailleurs en fonction des besoins de l’objet.,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
et la classe suivante implémente le Lutteur de l’interface.
Pour le principal.java:
pour l’initialisation d’objet en cas de classe abstraite ou d’interface, vous pouvez garder à l’esprit les éléments suivants,
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.