Java-interface (med eksempler)

I denne vejledning lærer vi om Java-grænseflader. Vi lærer at implementere grænseflader, og hvornår de skal bruges i detaljer ved hjælp af eksempler.

En grænseflade er en fuldstændig abstrakt klasse, der inkluderer en gruppe metoder uden krop.

I Java definerer en grænseflade et sæt specifikationer, som andre klasser skal implementere. For eksempel,

 interface Language ( public void getName(); )

Her har vi brugt interfacenøgleordet til at oprette en grænseflade med navnet Language. Sproggrænsefladen definerer en specifikation getName().

Nu skal hver klasse, der bruger denne grænseflade, implementere getName()specifikationen.

Eksempel: Java-interface

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

Produktion

 Programmeringssprog: Java

I ovenstående eksempel har vi oprettet en grænseflade med navnet Language. Interfacet inkluderer en abstrakt metode getName().

Her implementerer klassen ProgrammingLanguage grænsefladen og giver metoden implementering.

Det er ikke obligatorisk at bruge abstractnøgleord, mens man erklærer abstrakte metoder inde i en grænseflade. Det fordi en grænseflade kun inkluderer abstrakte metoder ikke almindelige metoder.

Bemærk : Alle metoder inde i en grænseflade er implicit, publicog alle felter er implicit public static final. For eksempel,

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

Implementering af et interface

Som abstrakte klasser kan vi ikke oprette objekter i en grænseflade. Vi kan dog implementere en grænseflade.

Vi bruger implementsnøgleordet til at implementere en grænseflade. For eksempel,

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

Produktion

 Arealet af rektanglet er 30

I ovenstående eksempel har vi oprettet en grænseflade ved navn Polygon. Interfacet indeholder en abstrakt metode getArea().

Her implementerer Rectangle-klassen Polygon. Og giver implementeringen af getArea()metoden.

Bemærk : En klasse kan implementere flere grænseflader. For eksempel,

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

Udvidelse af et interface

Svarende til klasser kan grænseflader udvide andre grænseflader. Den extendsnøgleordet anvendes til forlængelse grænseflader. For eksempel,

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

Her udvider Polygon-grænsefladen Line-grænsefladen. Nu, hvis nogen klasse implementerer Polygon, skal den give implementeringer for alle de abstrakte metoder for både Line og Polygon.

Bemærk : En grænseflade kan udvide flere grænseflader. For eksempel,

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

Fordele ved interface i Java

Nu hvor vi ved, hvad grænseflader er, lad os lære om, hvorfor grænseflader bruges i Java.

  • Grænseflader giver specifikationer, som en klasse (som implementerer den) skal følge.
    I vores tidligere eksempel har vi brugt getArea()som en specifikation inde i grænsefladen Polygon. Dette er som at indstille en regel om, at vi skal være i stand til at få området for hver polygon.
    Nu skal enhver klasse, der implementerer Polygon-grænsefladen, give en implementering af getArea()metoden.
  • Svarende til abstrakte klasser hjælper grænseflader os med at opnå abstraktion i Java .
    Her ved vi, at getArea()beregner arealet af polygoner, men den måde, som arealet beregnes på, er forskelligt for forskellige polygoner. Derfor er implementeringen af getArea()uafhængig af hinanden.
  • Grænseflader bruges også til at opnå flere arv i Java. For eksempel,
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Her implementerer klassen Rektangel to forskellige grænseflader. Sådan opnår vi flere arv i Java.

standardmetoder i Java-grænseflader

Med frigivelsen af ​​Java 8 kan vi nu tilføje metoder med implementering i en grænseflade. Disse metoder kaldes standardmetoder.

For at erklære standardmetoder inde i grænseflader bruger vi defaultnøgleordet. For eksempel,

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

Hvorfor standardmetoder?

Lad os tage et scenarie for at forstå, hvorfor standardmetoder introduceres i Java.

Antag, at vi skal tilføje en ny metode i en grænseflade.

Vi kan nemt tilføje metoden i vores grænseflade uden implementering. Det er dog ikke slutningen på historien. Alle vores klasser, der implementerer grænsefladen, skal give en implementering af metoden.

Hvis et stort antal klasser implementerede denne grænseflade, skal vi spore alle disse klasser og foretage ændringer i dem. Dette er ikke kun kedeligt, men også fejlbehæftet.

For at løse dette introducerede Java standardmetoder. Standardmetoder nedarves som almindelige metoder.

Lad os tage et eksempel for at få en bedre forståelse af standardmetoder.

Eksempel: Standardmetode i Java-interface

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

Produktion

Arealet af rektanglet er 30 jeg har 4 sider. Området på pladsen er 25 Jeg kan få sider af en polygon.

I ovenstående eksempel har vi oprettet en grænseflade ved navn Polygon. Det har en standardmetode getSides()og en abstrakt metode getArea().

Her har vi oprettet to klasser rektangel og firkant, der implementerer polygon.

Klassen Rektangel giver implementeringen af getArea()metoden og tilsidesætter getSides()metoden. Imidlertid giver Square-klassen kun implementeringen af getArea()metoden.

Nu, mens du kalder getSides()metoden ved hjælp af rektangelobjektet, kaldes den tilsidesatte metode. I tilfælde af Square-objektet kaldes standardmetoden imidlertid.

private og statiske metoder i grænsefladen

Java 8 tilføjede også en anden funktion for at inkludere statiske metoder inde i en grænseflade.

I lighed med en klasse kan vi få adgang til statiske metoder til en grænseflade ved hjælp af dens referencer. For eksempel,

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

Reglen til beregning af området er imidlertid forskellig for forskellige polygoner. Derfor getArea()er inkluderet uden implementering.

Enhver klasse, der implementerer Polygon, skal give en implementering af getArea().

Interessante artikler...