Interfață Java (cu exemple)

În acest tutorial, vom afla despre interfețele Java. Vom învăța cum să implementăm interfețe și când să le folosim în detaliu cu ajutorul exemplelor.

O interfață este o clasă complet abstractă care include un grup de metode fără corp.

În Java, o interfață definește un set de specificații pe care alte clase trebuie să le implementeze. De exemplu,

 interface Language ( public void getName(); )

Aici, am folosit interfacecuvântul cheie pentru a crea o interfață numită Limbă. Interfața Language definește o specificație getName().

Acum, fiecare clasă care folosește această interfață ar trebui să implementeze getName()specificația.

Exemplu: Interfață Java

 // create an interface interface Language ( void getName(String name); ) // class implements interface class ProgrammingLanguage implements Language ( // implementation of abstract method public void getName(String name) ( System.out.println("Programming Language: " + name); ) ) class Main ( public static void main(String() args) ( ProgrammingLanguage language = new ProgrammingLanguage(); language.getName("Java"); ) )

Ieșire

 Limbaj de programare: Java

În exemplul de mai sus, am creat o interfață numită Limbă. Interfața include o metodă abstractă getName().

Aici, clasa ProgrammingLanguage implementează interfața și oferă implementarea metodei.

Nu este obligatoriu să utilizați abstractcuvinte cheie în timp ce declarați metode abstracte în interiorul unei interfețe. Deoarece o interfață include doar metode abstracte, nu metode obișnuite.

Notă : Toate metodele din interiorul unei interfețe sunt implicit publicși toate câmpurile sunt implicit public static final. De exemplu,

 interface Language ( // by default public static final String type = "programming language"; // by default public void getName(); )

Implementarea unei interfețe

La fel ca clasele abstracte, nu putem crea obiecte ale unei interfețe. Cu toate acestea, putem implementa o interfață.

Folosim implementscuvântul cheie pentru a implementa o interfață. De exemplu,

 // create an interface interface Polygon ( void getArea(int length, int breadth); ) // implement the Polygon interface class Rectangle implements Polygon ( // implementation of abstract method public void getArea(int length, int breadth) ( System.out.println("The area of the rectangle is " + (length * breadth)); ) ) class Main ( public static void main(String() args) ( // create an object Rectangle r1 = new Rectangle(); r1.getArea(5, 6); ) )

Ieșire

 Aria dreptunghiului este 30

În exemplul de mai sus, am creat o interfață numită Poligon. Interfața conține o metodă abstractă getArea().

Aici, clasa Rectangle implementează Polygon. Și oferă implementarea getArea()metodei.

Notă : o clasă poate implementa mai multe interfețe. De exemplu,

 interface A ( // members of A ) interface B ( // members of B ) class C implements A, B ( // abstract members of A // abstract members of B )

Extinderea unei interfețe

Similar claselor, interfețele pot extinde alte interfețe. Cuvântul extendscheie este utilizat pentru extinderea interfețelor. De exemplu,

 interface Line ( // members of Line interface ) // extending interface interface Polygon extends Line ( // members of Polygon interface // members of Line interface )

Aici, interfața Polygon extinde interfața Line. Acum, dacă orice clasă implementează Poligon, ar trebui să ofere implementări pentru toate metodele abstracte atât ale Liniei, cât și ale Poligonului.

Notă : o interfață poate extinde mai multe interfețe. De exemplu,

 interface A (… ) interface B (… ) interface C extends A, B (… )

Avantajele interfeței în Java

Acum, că știm ce sunt interfețele, să aflăm de ce sunt utilizate interfețele în Java.

  • Interfețele oferă specificații pe care trebuie să le urmeze o clasă (care o implementează).
    În exemplul nostru anterior, am folosit getArea()ca specificație în interfața Poligon. Este ca și cum ați stabili o regulă care ar trebui să putem obține aria fiecărui poligon.
    Acum, orice clasă care implementează interfața Polygon trebuie să ofere o implementare pentru getArea()metodă.
  • Similar claselor abstracte, interfețele ne ajută să realizăm abstractizarea în Java .
    Aici, știm că getArea()calculează aria poligoanelor, dar modul în care este calculată aria este diferit pentru poligoane diferite. Prin urmare, implementarea getArea()este independentă una de cealaltă.
  • Interfețele sunt, de asemenea, utilizate pentru a obține moștenirea multiplă în Java. De exemplu,
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Aici, clasa Rectangle implementează două interfețe diferite. Așa realizăm moștenirea multiplă în Java.

metode implicite în interfețele Java

Odată cu lansarea Java 8, putem adăuga acum metode cu implementare într-o interfață. Aceste metode se numesc metode implicite.

Pentru a declara metodele implicite în interiorul interfețelor, folosim defaultcuvântul cheie. De exemplu,

 public default void getSides() ( // body of getSides() )

De ce metodele implicite?

Să luăm un scenariu pentru a înțelege de ce metodele implicite sunt introduse în Java.

Să presupunem că trebuie să adăugăm o nouă metodă într-o interfață.

Putem adăuga metoda în interfața noastră cu ușurință, fără implementare. Cu toate acestea, acesta nu este sfârșitul poveștii. Toate clasele noastre care implementează acea interfață trebuie să ofere o implementare pentru metodă.

Dacă un număr mare de clase implementau această interfață, trebuie să urmărim toate aceste clase și să le modificăm. Acest lucru nu este doar obositor, ci și predispus la erori.

Pentru a rezolva acest lucru, Java a introdus metode implicite. Metodele implicite sunt moștenite ca metodele obișnuite.

Să luăm un exemplu pentru a înțelege mai bine metodele implicite.

Exemplu: Metoda implicită în interfața Java

 interface Polygon ( void getArea(); // default method default void getSides() ( System.out.println("I can get sides of a polygon."); ) ) // implements the interface class Rectangle implements Polygon ( public void getArea() ( int length = 6; int breadth = 5; int area = length * breadth; System.out.println("The area of the rectangle is " + area); ) // overrides the getSides() public void getSides() ( System.out.println("I have 4 sides."); ) ) // implements the interface class Square implements Polygon ( public void getArea() ( int length = 5; int area = length * length; System.out.println("The area of the square is " + area); ) ) class Main ( public static void main(String() args) ( // create an object of Rectangle Rectangle r1 = new Rectangle(); r1.getArea(); r1.getSides(); // create an object of Square Square s1 = new Square(); s1.getArea(); s1.getSides(); ) )

Ieșire

Aria dreptunghiului este 30 Am 4 laturi. Suprafața pătratului este de 25 Pot obține laturi ale unui poligon.

În exemplul de mai sus, am creat o interfață numită Poligon. Are o metodă implicită getSides()și o metodă abstractă getArea().

Aici, am creat două clase Rectangle și Square care implementează Polygon.

Clasa Rectangle oferă implementarea getArea()metodei și suprascrie getSides()metoda. Cu toate acestea, clasa Square oferă doar implementarea getArea()metodei.

Acum, în timp ce se apelează getSides()metoda folosind obiectul Rectangle, se apelează metoda suprascrisă. Cu toate acestea, în cazul obiectului Square, se apelează metoda implicită.

Metode private și statice în interfață

Java 8 a adăugat, de asemenea, o altă caracteristică pentru a include metode statice în interiorul unei interfețe.

Similar unei clase, putem accesa metodele statice ale unei interfețe folosind referințele acesteia. De exemplu,

 // create an interface interface Polygon ( staticMethod()(… ) ) // access static method Polygon.staticMethod();

Note: With the release of Java 9, private methods are also supported in interfaces.

We cannot create objects of an interface. Hence, private methods are used as helper methods that provide support to other methods in interfaces.

Practical Example of Interface

Let's see a more practical example of Java Interface.

 // To use the sqrt function import java.lang.Math; interface Polygon ( void getArea(); // calculate the perimeter of a Polygon default void getPerimeter(int… sides) ( int perimeter = 0; for (int side: sides) ( perimeter += side; ) System.out.println("Perimeter: " + perimeter); ) ) class Triangle implements Polygon ( private int a, b, c; private double s, area; // initializing sides of a triangle Triangle(int a, int b, int c) ( this.a = a; this.b = b; this.c = c; s = 0; ) // calculate the area of a triangle public void getArea() ( s = (double) (a + b + c)/2; area = Math.sqrt(s*(s-a)*(s-b)*(s-c)); System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( Triangle t1 = new Triangle(2, 3, 4); // calls the method of the Triangle class t1.getArea(); // calls the method of Polygon t1.getPerimeter(2, 3, 4); ) )

Output

 Area: 2.9047375096555625 Perimeter: 9

In the above program, we have created an interface named Polygon. It includes a default method getPerimeter() and an abstract method getArea().

We can calculate the perimeter of all polygons in the same manner so we implemented the body of getPerimeter() in Polygon.

Now, all polygons that implement Polygon can use getPerimeter() to calculate perimeter.

Cu toate acestea, regula pentru calcularea ariei este diferită pentru poligoane diferite. Prin urmare, getArea()este inclus fără implementare.

Orice clasă care implementează Polygon trebuie să ofere o implementare a getArea().

Articole interesante...