Java interfész (példákkal)

Ebben az oktatóanyagban megismerhetjük a Java interfészeket. Megtanuljuk, hogyan kell az interfészeket megvalósítani, és mikor kell ezeket részletesen felhasználni a példák segítségével.

Az interfész egy teljesen absztrakt osztály, amely test nélküli módszerek csoportját tartalmazza.

A Java-ban egy interfész meghatározza a specifikációk készletét, amelyet más osztályoknak kell végrehajtaniuk. Például,

 interface Language ( public void getName(); )

Itt a interfacekulcsszóval létrehoztuk a Nyelv nevű felületet. A Nyelv felület meghatároz egy specifikációt getName().

Most minden osztálynak, amely ezt a felületet használja, végre kell hajtania a getName()specifikációt.

Példa: Java interfész

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

Kimenet

 Programozási nyelv: Java

A fenti példában létrehoztunk egy Language nevű felületet. A felület tartalmaz egy elvont módszert getName().

Itt a ProgrammingLanguage osztály valósítja meg az interfészt és biztosítja a módszer megvalósítását.

A abstractkulcsszó használata nem kötelező, miközben az absztrakt módszereket egy felületen deklarálja. Azért, mert egy felület csak elvont módszereket tartalmaz, nem pedig szabályos módszereket.

Megjegyzés : Az interfészen belül az összes metódus implicit public, az összes mező pedig implicit public static final. Például,

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

Interfész megvalósítása

Az absztrakt osztályokhoz hasonlóan nem hozhatunk létre egy felület objektumait. Felületet azonban megvalósíthatunk.

A implementskulcsszót egy felület megvalósításához használjuk . Például,

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

Kimenet

 A téglalap területe 30

A fenti példában létrehoztunk egy Polygon nevű felületet. A felület tartalmaz egy elvont módszert getArea().

Itt a Téglalap osztály hajtja végre a Sokszöget. És biztosítja a getArea()módszer megvalósítását.

Megjegyzés : Egy osztály több interfészt is megvalósíthat. Például,

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

Interfész kiterjesztése

Az osztályokhoz hasonlóan az interfészek kiterjeszthetik más interfészeket is. A extendskulcsszó az interfészek kiterjesztésére szolgál. Például,

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

Itt a Polygon interfész kiterjeszti a Line interfészt. Most, ha valamelyik osztály megvalósítja a Sokszöget, akkor a Line és a Sokszög összes elvont metódusának megvalósításokat kell biztosítania.

Megjegyzés : Egy interfész több interfészt is kiterjeszthet. Például,

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

A Java felületének előnyei

Most, hogy tudjuk, melyek az interfészek, ismerkedjünk meg azzal, hogy miért használják az interfészeket a Java-ban.

  • Az interfészek olyan specifikációkat nyújtanak, amelyeket egy osztálynak (amely végrehajtja) be kell tartania.
    Korábbi példánkban getArea()specifikációként használtuk a Polygon felületet. Ez olyan, mintha meghatároznánk azt a szabályt, hogy képesek legyünk megszerezni minden sokszög területét.
    Most minden osztálynak, amely megvalósítja a sokszög felületet, biztosítania kell a getArea()módszer megvalósítását.
  • Az absztrakt osztályokhoz hasonlóan az interfészek is segítenek az absztrakció elérésében a Java-ban .
    Itt tudjuk, hogy getArea()kiszámítja a sokszögek területét, de a terület számításának módja különböző a sokszögek esetében. Ezért a (z) megvalósítása getArea()egymástól független.
  • Az interfészeket többszörös öröklés elérésére is használják a Java-ban. Például,
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Itt a Téglalap osztály két különböző interfészt valósít meg. Így érjük el a Java többszörös öröklődését.

alapértelmezett módszerek a Java interfészekben

A Java 8 kiadásával most felvehetünk metódusokat megvalósítással egy felületen belül. Ezeket a módszereket alapértelmezett metódusoknak nevezzük.

Az alapértelmezett módszerek deklarálásához az interfészeken belül a defaultkulcsszót használjuk . Például,

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

Miért alapértelmezett módszerek?

Vegyünk egy forgatókönyvet, hogy megértsük, miért vezetik be az alapértelmezett módszereket a Java-ban.

Tegyük fel, hogy egy új módszert kell hozzáadnunk egy interfészhez.

Könnyen hozzáadhatjuk a módszert a kezelőfelületünkre megvalósítás nélkül. Ezzel azonban még nem ért véget a történet. Minden osztályunknak, amely ezt az interfészt megvalósítja, biztosítania kell a módszer megvalósítását.

Ha sok osztály implementálta ezt a felületet, akkor nyomon kell követnünk ezeket az osztályokat, és változtatnunk kell rajtuk. Ez nemcsak unalmas, de hibára is hajlamos.

Ennek megoldására a Java alapértelmezett módszereket vezetett be. Az alapértelmezett módszereket a hagyományos módszerekhez hasonlóan öröklik.

Vegyünk egy példát, hogy jobban megértsük az alapértelmezett módszereket.

Példa: Alapértelmezett módszer a Java felületen

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

Kimenet

A téglalap területe 30, 4 oldalam van. A négyzet területe 25 A sokszög oldalát el tudom érni.

In the above example, we have created an interface named Polygon. It has a default method getSides() and an abstract method getArea().

Here, we have created two classes Rectangle and Square that implement Polygon.

The Rectangle class provides the implementation of the getArea() method and overrides the getSides() method. However, the Square class only provides the implementation of the getArea() method.

Now, while calling the getSides() method using the Rectangle object, the overridden method is called. However, in the case of the Square object, the default method is called.

private and static Methods in Interface

The Java 8 also added another feature to include static methods inside an interface.

Similar to a class, we can access static methods of an interface using its references. For example,

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

A terület kiszámításának szabálya azonban különböző a sokszögek esetében. Ezért getArea()megvalósítás nélkül szerepel.

Minden osztálynak, amely megvalósítja a Sokszöget, biztosítania kell a getArea().

érdekes cikkek...