Java saskarne (ar piemēriem)

Šajā apmācībā mēs uzzināsim par Java saskarnēm. Mēs uzzināsim, kā ar piemēru palīdzību ieviest saskarnes un kad tās detalizēti izmantot.

Interfeiss ir pilnīgi abstrakta klase, kas ietver metožu grupu bez ķermeņa.

Java saskarne nosaka specifikāciju kopu, kas jāievieš citām klasēm. Piemēram,

 interface Language ( public void getName(); )

Šeit mēs izmantojām interfaceatslēgvārdu, lai izveidotu interfeisu ar nosaukumu Valoda. Valodas saskarne nosaka specifikāciju getName().

Tagad katrai klasei, kas izmanto šo saskarni, ir jāievieš getName()specifikācija.

Piemērs: Java saskarne

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

Rezultāts

 Programmēšanas valoda: Java

Iepriekš minētajā piemērā mēs esam izveidojuši saskarni ar nosaukumu Valoda. Saskarne ietver abstraktu metodi getName().

Šeit ProgrammingLanguage klase ievieš saskarni un nodrošina metodes ieviešanu.

abstractDeklarējot abstraktas metodes saskarnē, nav obligāti jāizmanto atslēgvārds. Tā kā saskarne ietver tikai abstraktas metodes, nevis regulāras metodes.

Piezīme . Visas saskarnes metodes ir netieši, publicun visi lauki ir netieši public static final. Piemēram,

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

Saskarnes ieviešana

Tāpat kā abstraktās klases, mēs nevaram izveidot saskarnes objektus. Tomēr mēs varam ieviest saskarni.

Mēs izmantojam implementsatslēgvārdu saskarnes ieviešanai. Piemēram,

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

Rezultāts

 Taisnstūra laukums ir 30

Iepriekš minētajā piemērā mēs esam izveidojuši interfeisu ar nosaukumu Polygon. Saskarne satur abstraktu metodi getArea().

Šeit Taisnstūra klase ievieš daudzstūri. Un nodrošina getArea()metodes ieviešanu.

Piezīme : Klase var ieviest vairākas saskarnes. Piemēram,

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

Saskarnes paplašināšana

Līdzīgi kā klasēs, saskarnes var paplašināt citas saskarnes. extendsAtslēgvārds tiek izmantots, lai paplašinātu saskarnes. Piemēram,

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

Šeit daudzstūra interfeiss paplašina līnijas saskarni. Tagad, ja kāda klase ievieš daudzstūri, tai ir jānodrošina ieviešana visām līnijas un daudzstūra abstraktajām metodēm.

Piezīme : Saskarne var paplašināt vairākas saskarnes. Piemēram,

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

Java saskarnes priekšrocības

Tagad, kad mēs zinām, kas ir saskarnes, uzzināsim, kāpēc saskarnes tiek izmantotas Java.

  • Saskarnes nodrošina specifikācijas, kas jāievēro klasei (kas to ievieš).
    Iepriekšējā piemērā mēs izmantojām getArea()kā specifikāciju daudzstūra interfeisa iekšpusē. Tas ir kā tāda noteikuma noteikšana, ka mums jāspēj iegūt katra daudzstūra laukums.
    Tagad jebkurai klasei, kas ievieš daudzstūra saskarni, ir jānodrošina getArea()metodes ieviešana.
  • Līdzīgi abstraktām klasēm, saskarnes palīdz mums sasniegt abstrakciju Java .
    Mēs zinām, ka getArea()aprēķina daudzstūru laukumu, bet platības aprēķināšanas veids dažādiem poligoniem ir atšķirīgs. Tādējādi ieviešana getArea()ir viena no otras neatkarīga.
  • Saskarnes tiek izmantotas arī, lai panāktu Java vairākkārtēju mantošanu. Piemēram,
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Šeit klases taisnstūris ievieš divas dažādas saskarnes. Šādi mēs panākam Java vairākkārtēju mantošanu.

noklusējuma metodes Java saskarnēs

Ar Java 8 izlaišanu mēs tagad varam pievienot metodes ar ieviešanu saskarnē. Šīs metodes sauc par noklusējuma metodēm.

Lai paziņotu par noklusējuma metodēm saskarnēs, mēs izmantojam defaultatslēgvārdu. Piemēram,

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

Kāpēc noklusējuma metodes?

Pieņemsim scenāriju, lai saprastu, kāpēc Java tiek ieviestas noklusējuma metodes.

Pieņemsim, ka saskarnē mums jāpievieno jauna metode.

Metodi varam viegli pievienot mūsu saskarnē bez ieviešanas. Tomēr ar to viss nebeidzas. Visām mūsu klasēm, kas ievieš šo saskarni, ir jānodrošina metodes ieviešana.

Ja šo saskarni ieviesa liels skaits klašu, mums jāizseko visas šīs klases un jāveic tajās izmaiņas. Tas ir ne tikai garlaicīgs, bet arī kļūdu risks.

Lai to atrisinātu, Java ieviesa noklusējuma metodes. Noklusējuma metodes tiek pārmantotas tāpat kā parastās metodes.

Ņemsim piemēru, lai labāk izprastu noklusējuma metodes.

Piemērs: Java saskarnes noklusējuma metode

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

Rezultāts

Taisnstūra laukums ir 30, man ir 4 malas. Kvadrāta laukums ir 25 Es varu iegūt daudzstūra malas.

Iepriekš minētajā piemērā mēs esam izveidojuši interfeisu ar nosaukumu Polygon. Tam ir noklusējuma metode getSides()un abstrakta metode getArea().

Šeit mēs esam izveidojuši divas taisnstūra un kvadrāta klases, kas ievieš daudzstūri.

Taisnstūra klase nodrošina getArea()metodes ieviešanu un ignorē getSides()metodi. Tomēr kvadrāta klase nodrošina tikai getArea()metodes ieviešanu.

Tagad, izsaucot getSides()metodi, izmantojot objektu Taisnstūris, tiek izsaukta ignorētā metode. Tomēr kvadrātveida objekta gadījumā tiek izsaukta noklusējuma metode.

privātās un statiskās metodes saskarnē

Java 8 pievienoja vēl vienu funkciju, lai interfeisā iekļautu statiskas metodes.

Līdzīgi kā klasē, mēs varam piekļūt saskarnes statiskām metodēm, izmantojot tās atsauces. Piemēram,

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

Tomēr noteiktais laukuma aprēķināšanas noteikums dažādiem poligoniem ir atšķirīgs. Tādējādi getArea()ir iekļauts bez ieviešanas.

Jebkurai klasei, kas īsteno daudzstūri, jānodrošina getArea().

Interesanti raksti...