Qu'est-ce que l'interface en Java et comment l'implémenter?



Cet article vous aidera avec une approche globale de l'interface Java et des différents types d'exemples liés à ses fonctionnalités.

' Interface est un niveau avancé d'abstraction dans le langage de programmation Java. L'interface Java aide à réduction de la complexité dans le code et simplifie le lisibilité . Dans cet article, je vais vous expliquer l'interface Java via le dossier suivant.

Qu'est-ce qu'une interface Java?

Interface informatique est connue comme une limite qui sépare deux ou plusieurs systèmes. Il échange des données entre les composants d'un système qui pourraient signaux, commandes ou protocoles.





java-interface

Java Abstraction fournit les fonctionnalités d'une méthode particulière en masquant la logique d'implémentation écrite à l'intérieur de la méthode. De même, l'interface Java est également une classe abstraite qui inclut la déclaration de méthode mais pas sa définition. Une classe met en oeuvre une Interface pour hériter des méthodes abstraites. En plus des méthodes abstraites, un interface peut également inclure constantes, méthodes statiques, interfaces imbriquées et méthodes par défaut.



générer une chaîne aléatoire en java

Similitudes entre une classe et une interface.

Une interface est complètement similaire à une classe normale en Java. Une interface comprend les méthodes abstraites et ces méthodes sont conçues pour être implémentées. Ce processus est simplement égal à l'héritage, ce qui est normal en ce qui concerne les classes. Nous discuterons plus sur les similitudes.

  • Identique à une classe, une interface peut également contenir autant de méthodes que nécessaire.
  • Similaire aux classes, l'interface est également écrite avec un .Java fichier d'extension.
  • Étonnamment, le bytecode d'une interface est apparu dans un .classe fichier.
  • Une interface est affichée sous la forme d'un package et leur bytecode respectif se trouve dans un répertoire qui correspond au nom du package.

Pourquoi avons-nous besoin d'une interface?

Java ne prend pas en charge Héritages multiples, en raison de quoi, il ne permettra pas aux classes d'étendre plus d'une classe à une instance. Cours pour enfants ne pouvait pas hériter des propriétés de classes de parents multiples en une seule instance, car il en résulte Problème de diamant. Pour surmonter ce problème, Interface est introduit. Comprenons ce problème à travers un exemple.



Supposons que nous ayons deux avions, on ne peut transporter que passagers, l'autre seulement position. Maintenant, nous devons hériter les propriétés de l'avion cargo et de l'avion de passagers. Java ne prendrait pas en charge cette solution car elle aboutit à ambiguïté entre les deux avions.

Mais, si vous pouvez le rendre possible en donnant l'impression à Java qu'il hérite d'un plan et exécution les méthodes présentes dans l'autre plan. C'est comme un avion commercial qui prend à la fois des passagers et des bagages de fret. L'interface est comme créer un avion plus grand qui pourrait faire les deux tâches sans interférer avec les composants l'un de l'autre, au lieu de simplement emprunter les méthodes du Classe d'interface.

// Code de classe A

package multiple classe A {void msg () {System.out.println ('Hello')}}

// Code de classe B

package multiple classe B {void msg () {System.out.println ('Welcome')}}

Code de classe C

package multiple classe C étend A, B {// Cela ne sera pas accepté par Java, cela générera une erreur et le code ne sera pas exécuté. public static void main (String args []) {C obj = new C () obj.msg ()}}

Production:

Erreur. Cette approche particulière jette une exception. Java ne prend pas en charge les héritages multiples. Cette erreur est connue sous le nom de Problème de diamant 

Essayons une solution en utilisant une interface, Classes enfants peut accéder aux méthodes depuis Parent multiple classes en une seule instance.

// Code d'interface

package solution d'interface publique MIS {public void Hello () public void Welcome ()}

//Code de la classe

package MIS public class classA implements solution {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Welcome to Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Production:

Bonjour le monde
Bienvenue à Edureka

Déclaration d'une interface Java: syntaxe

interface nom_interface {// déclarer les champs constants // déclarer les méthodes () // méthodes par défaut}

Passons en revue un exemple sur l'interface Java

Exemple d'interface Java

Créons une calculatrice simple basée sur l'interface Java.

// Code d'interface

package basicoperations interface publique maths {public void add () public void sub () public void mul () public void div ()}

//Code de la classe

package basicoperations import java.util.Scanner public class student1 implements maths {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​to perform addition') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Sum of' + a + 'et' + b + 'est' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Entrez deux valeurs entières quelconques pour effectuer la soustraction') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Difference of' + a + 'and' + b + 'is' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter multiplication de deux valeurs entières quelconques ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Product of '+ a +' and '+ b +' is '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​division') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Quotient de' + a + 'et' + b + 'est' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Production:

En progressant plus loin, nous apprendrons à imbriquer une interface Java.

Imbrication de l'interface Java

Imbrication d'interface est un processus de déclaration d'une interface dans une autre Interface existante ou déclarer une interface dans un Classe. L'interface imbriquée est également appelée Interface intérieure.

L'interface imbriquée n'est pas accessible directement . Par conséquent, Nesting est mis en œuvre afin de résoudre les espaces de noms en les regroupant avec leurs Interfaces et Des classes. Par cette procédure,nous pouvons appeler le Interface imbriquée à travers le Classe extérieure ou Interface externe nom suivi d'un point (.) , et Nom de l'interface.

Essayons quelques exemples basés sur Imbrication d'interface. Tout d'abord, essayons d'imbriquer un Interface Java dans un autre Interface Java comme indiqué ci-dessous:

// Code d'interface

package Nest public interface OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

//Code de la classe

package La classe Nest NestedInterfaceDemo implémente OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nPrinting from Nested InnerInterface method ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Production:

10 premiers termes: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Impression à partir de la méthode Nested InnerInterface ...!

Maintenant, essayons d'imbriquer un Interface Java à l'intérieur d'un Classe Java.

// Code d'interface

package Nest2 classe publique EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

//Code de la classe

package Nest2 class NestedInterfaceDemo2 implémente EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] pour (lrAtrayAs) .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Production:

akerudE

Bien qu'une interface ressemble presque à une classe, il existe quelques différences entre elles, discutons de leurs différences.

que fait le format en python

Différence entre la classe Java et l'interface Java

INTERFACE CLASSE
Prend en charge l'héritage multiple Ne prend pas en charge l'héritage multiple
N'a pas de membres de données Inclut les membres de données
N'a pas de constructeurs Comprend les constructeurs
Comprend les membres incomplets (membre signature) Comprend à la fois les membres complets (résumé) et incomplets
N'a pas de modificateurs d'accès Comprend des modificateurs d'accès
L'interface n'a pas de membres statiques La classe a tous ses membres comme statiques

Avantages et inconvénients de l'interface Java

Avantages:

  • L'interface Java prend en charge Héritage multiple.
  • L'interface Java permet aux programmeurs de briser les approches de programmation complexes et de simplifier dépendances entre les objets.
  • L'interface Java rend le membres de données et méthodes dans une application à coupler de manière lâche.

Désavantages:

  • L'utilisation de l'interface Java réduit le vitesse d'exécution de l'application.
  • Les interfaces Java de l'application sont soit utilisées à plusieurs reprises dans une large mesure, soit à peine utilisées.

Points clés sur l'interface Java

  • Aucune des méthodes déclarées dans l'interface n'a de corps qui lui permet de fournir une abstraction complète.
  • Il n'est pas possible de créer un objet d'une interface. Par conséquent, l'instanciation d'une interface n'est pas possible.
  • Une classe peut implémenter une interface à l'aide du mot clé implements. Voyons cela à travers un exemple.

// Code d'interface

package extInterface interface publique extInterface {public void method1 () public void method2 ()}

//Code de la classe

package extInterface import java.util.Scanner classe Edureka implémente extInterface {public void method1 () {System.out.println ('implementation of method1') Scanner scanner = new Scanner (System.in) System.out.println ('Enter number pour trouver la racine carrée en Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Racine carrée du nombre:% f est:% f% n ', square, squareRoot)} public void method2 () {System.out.println ('implementation of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Production:

implémentation de la méthode1 Entrez un nombre pour trouver la racine carrée en Java: 16 La racine carrée du nombre: 16,0 est: 4,0
  • Une classe peut implémenter plusieurs héritages sur une seule instance. Comprenons-le à travers le code suivant.

// Code de l'interface 1

package ExtendInt interface publique Interface1 {public void armstrong ()}

// Code de l'interface 2

package ExtendInt public interface Interface2 {public void prime ()} // Classe Code package ExtendInt public class Edureka2 implémente Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n while (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('nombre armstrong') else System.out.println ('Not armstrong number') System.out.println ('Extending to Interface 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // input m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'n'est pas un nombre premier')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'n'est pas un nombre premier') flag = 1 break}} if (flag == 0) {System.out.println (n + 'est un nombre premier')}} System.out.println ('Extension à l'interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}}

Production:

3 est un nombre premier Extension à l'interface 2 Nombre armstrong Extension à l'interface 1
  • L'interface Java requiert que les variables déclarées soient initialisées au moment de la déclaration.
  • Les modificateurs d'accès pour une interface sont définis par défaut sur public static et final. Comprenons cela par un exemple

// Code d'interface

package test interface publique Try {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Toutes les déclarations ci-dessus sont vraies et valides dans une interface.
  • L'interface Java est capable d'étendre n'importe quel nombre d'interfaces, mais ne peut jamais en implémenter une.
  • Une classe Java peut implémenter n'importe quel nombre d'interfaces.
  • La classe Java ne peut pas implémenter des interfaces avec le même nom de méthode et un type de retour différent.
  • S'il y a deux méthodes ou plus avec le même nom de méthode, existent dans plusieurs interfaces, l'implémentation de la méthode pour une fois suffit. Comprenons cela avec un exemple pratique.

// Code d'interface

paquet même interface publique A {public void display ()} // paquet de code d'interface même interface publique B {public void display ()} // paquet de code de classe même classe même implémente A, B {public void display () {System.out .println ('affichage des données')} public static void main (String [] args) {same print = new same () print.display ()}}

Production:

Bienvenue sur Edureka E-Learning

Avec cela, nous arrivons à la fin de cet article. J'espère que vous avez compris l'importance de l'interface, de la syntaxe, de la fonctionnalité, de l'imbrication d'interface, des points clés de l'interface Java et des opérations effectuées en les utilisant.

Maintenant que vous avez compris les bases de Java, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Printemps .

Vous avez une question pour nous? Mentionnez-le dans la section commentaires de ce blog «Java Interface» et nous vous répondrons dans les plus brefs délais.