Java vmesnik (s primeri)

V tej vadnici bomo spoznali vmesnike Java. S pomočjo primerov bomo izvedeli, kako izvajati vmesnike in kdaj jih podrobno uporabljati.

Vmesnik je popolnoma abstrakten razred, ki vključuje skupino metod brez telesa.

V Javi vmesnik definira nabor specifikacij, ki jih morajo izvajati drugi razredi. Na primer

 interface Language ( public void getName(); )

Tu smo s interfaceključno besedo ustvarili vmesnik z imenom Jezik. Jezikovni vmesnik definira specifikacijo getName().

Zdaj bi moral vsak razred, ki uporablja ta vmesnik, uvesti getName()specifikacijo.

Primer: Java vmesnik

 // 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"); ) )

Izhod

 Programski jezik: Java

V zgornjem primeru smo ustvarili vmesnik z imenom Jezik. Vmesnik vključuje abstraktno metodo getName().

Tukaj razred ProgrammingLanguage izvaja vmesnik in zagotavlja izvedbo metode.

abstractMed razglasitvijo abstraktnih metod znotraj vmesnika ni obvezno uporabljati ključne besede. Ker vmesnik vključuje samo abstraktne metode in ne običajne metode.

Opomba : Vse metode v vmesniku so implicitno publicin vsa polja so implicitno public static final. Na primer

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

Izvajanje vmesnika

Tako kot abstraktni razredi ne moremo ustvariti predmetov vmesnika. Lahko pa uporabimo vmesnik.

Ključno implementsbesedo uporabljamo za izvedbo vmesnika. Na primer

 // 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); ) )

Izhod

 Površina pravokotnika je 30

V zgornjem primeru smo ustvarili vmesnik z imenom Poligon. Vmesnik vsebuje abstraktno metodo getArea().

Tu razred Rectangle izvaja Polygon. In zagotavlja izvajanje getArea()metode.

Opomba : Razred lahko izvaja več vmesnikov. Na primer

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

Razširitev vmesnika

Podobno kot razredi lahko tudi vmesniki razširjajo druge vmesnike. Ključna extendsbeseda se uporablja za razširitev vmesnikov. Na primer

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

Tu vmesnik Polygon razširja vmesnik Line. Zdaj, če kateri koli razred izvaja Polygon, bi moral zagotoviti izvedbe za vse abstraktne metode Line in Polygon.

Opomba : Vmesnik lahko razširi več vmesnikov. Na primer

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

Prednosti vmesnika v Javi

Zdaj, ko vemo, kaj so vmesniki, se naučimo, zakaj se vmesniki uporabljajo v Javi.

  • Vmesniki zagotavljajo specifikacije , ki jih mora upoštevati razred (ki ga izvaja).
    V našem prejšnjem primeru smo uporabili getArea()kot specifikacijo znotraj vmesnika Polygon. To je kot določanje pravila, da bi morali dobiti območje vsakega mnogokotnika.
    Zdaj mora vsak razred, ki izvaja vmesnik Polygon, zagotoviti izvedbo getArea()metode.
  • Podobno kot abstraktni razredi nam tudi vmesniki pomagajo do abstrakcije v Javi .
    Tu vemo, da getArea()izračuna površino poligonov, vendar je način izračuna površine različen za različne poligone. Zato je izvajanje getArea()neodvisno drug od drugega.
  • Vmesniki se uporabljajo tudi za večkratno dedovanje v Javi. Na primer
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Tu razred Class Rectangle izvaja dva različna vmesnika. Tako dosežemo večkratno dedovanje v Javi.

privzete metode v vmesnikih Java

Z izdajo Java 8 lahko zdaj dodamo metode z implementacijo znotraj vmesnika. Te metode se imenujejo privzete metode.

Za razglasitev privzetih metod v vmesnikih uporabimo defaultključno besedo. Na primer

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

Zakaj privzete metode?

Vzemimo scenarij, da bomo razumeli, zakaj so v Javi uvedene privzete metode.

Recimo, da moramo v vmesnik dodati novo metodo.

Metodo lahko v naš vmesnik enostavno dodamo brez implementacije. Vendar to še ni konec zgodbe. Vsi naši razredi, ki izvajajo ta vmesnik, morajo zagotoviti izvedbo metode.

Če je veliko število razredov izvajalo ta vmesnik, moramo slediti vsem tem razredom in jih spremeniti. To ni le dolgočasno, ampak tudi nagnjeno k napakam.

Da bi to rešila, je Java uvedla privzete metode. Privzete metode se podedujejo kot običajne metode.

Vzemimo primer, da bomo bolje razumeli privzete metode.

Primer: Privzeta metoda v vmesniku 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(); ) )

Izhod

Površina pravokotnika je 30 Imam 4 stranice. Površina kvadrata je 25. Lahko dobim stranice mnogokotnika.

V zgornjem primeru smo ustvarili vmesnik z imenom Poligon. Ima privzeto metodo getSides()in abstraktno metodo getArea().

Tu smo ustvarili dva razreda Pravokotnik in Kvadrat, ki izvajata Poligon.

Razred Rectangle zagotavlja izvajanje getArea()metode in preglasi getSides()metodo. Vendar razred Square zagotavlja samo izvajanje getArea()metode.

Zdaj je med klicanjem getSides()metode z uporabo predmeta Rectangle poklicana nadomeščena metoda. V primeru predmeta Square pa se prikliče privzeta metoda.

zasebne in statične metode v vmesniku

Java 8 je prav tako dodal še eno funkcijo, ki vključuje statične metode znotraj vmesnika.

Podobno kot pri razredu lahko do statičnih metod vmesnika dostopamo z uporabo njegovih referenc. Na primer

 // 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.

Vendar je pravilo za izračun površine različno za različne poligone. Zato getArea()je vključen brez izvedbe.

Vsak razred, ki izvaja Polygon, mora zagotoviti izvajanje getArea().

Zanimive Članki...