Antarmuka Java (Dengan Contoh)

Dalam tutorial ini, kita akan belajar tentang antarmuka Java. Kami akan belajar bagaimana mengimplementasikan antarmuka dan kapan menggunakannya secara rinci dengan bantuan contoh.

Antarmuka adalah kelas yang sepenuhnya abstrak yang menyertakan sekelompok metode tanpa isi.

Di Java, antarmuka mendefinisikan sekumpulan spesifikasi yang harus diterapkan oleh kelas lain. Sebagai contoh,

 interface Language ( public void getName(); )

Di sini, kami telah menggunakan interfacekata kunci untuk membuat antarmuka bernama Bahasa. Antarmuka Bahasa menentukan spesifikasi getName().

Sekarang, setiap kelas yang menggunakan antarmuka ini harus mengimplementasikan getName()spesifikasinya.

Contoh: Antarmuka 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"); ) )

Keluaran

 Bahasa Pemrograman: Java

Dalam contoh di atas, kami telah membuat antarmuka bernama Bahasa. Antarmuka menyertakan metode abstrak getName().

Di sini, kelas ProgrammingLanguage mengimplementasikan antarmuka dan menyediakan implementasi untuk metode tersebut.

Tidak wajib menggunakan abstractkata kunci saat mendeklarasikan metode abstrak di dalam antarmuka. Itu karena antarmuka hanya menyertakan metode abstrak bukan metode biasa.

Catatan : Semua metode di dalam antarmuka secara implisit publicdan semua bidang secara implisit public static final. Sebagai contoh,

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

Menerapkan Antarmuka

Seperti kelas abstrak, kita tidak dapat membuat objek antarmuka. Namun, kami dapat mengimplementasikan antarmuka.

Kami menggunakan implementskata kunci untuk mengimplementasikan antarmuka. Sebagai contoh,

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

Keluaran

 Luas persegi panjang tersebut adalah 30

Dalam contoh di atas, kami telah membuat antarmuka bernama Polygon. Antarmuka berisi metode abstrak getArea().

Di sini, kelas Rectangle mengimplementasikan Polygon. Dan, menyediakan implementasi getArea()metode.

Catatan : Sebuah kelas dapat mengimplementasikan banyak antarmuka. Sebagai contoh,

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

Memperluas Antarmuka

Mirip dengan kelas, antarmuka dapat memperluas antarmuka lain. Kata extendskunci digunakan untuk memperluas antarmuka. Sebagai contoh,

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

Di sini, antarmuka Polygon memperluas antarmuka Line. Sekarang, jika ada kelas yang mengimplementasikan Polygon, ia harus menyediakan implementasi untuk semua metode abstrak Line dan Polygon.

Catatan : Antarmuka dapat memperluas banyak antarmuka. Sebagai contoh,

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

Keuntungan Antarmuka di Java

Sekarang kita tahu apa itu antarmuka, mari pelajari tentang mengapa antarmuka digunakan di Java.

  • Antarmuka memberikan spesifikasi yang harus diikuti oleh kelas (yang mengimplementasikannya).
    Dalam contoh kami sebelumnya, kami telah menggunakan getArea()spesifikasi di dalam antarmuka Polygon. Ini seperti menetapkan aturan bahwa, kita harus bisa mendapatkan luas setiap poligon.
    Sekarang setiap kelas yang mengimplementasikan antarmuka Polygon harus menyediakan implementasi untuk getArea()metode tersebut.
  • Mirip dengan kelas abstrak, antarmuka membantu kita mencapai abstraksi di Java .
    Di sini, kita mengetahui cara getArea()menghitung luas poligon tetapi cara penghitungan luas untuk poligon berbeda. Oleh karena itu, penerapannya getArea()tidak bergantung satu sama lain.
  • Antarmuka juga digunakan untuk mencapai banyak pewarisan di Java. Sebagai contoh,
     interface Line (… ) interface Polygon (… ) class Rectangle implements Line, Polygon (… )

    Di sini, kelas Rectangle mengimplementasikan dua antarmuka berbeda. Ini adalah cara kami mencapai multiple inheritance di Java.

metode default di Java Interfaces

Dengan rilis Java 8, sekarang kita dapat menambahkan metode dengan implementasi di dalam antarmuka. Metode ini disebut metode default.

Untuk mendeklarasikan metode default di dalam antarmuka, kami menggunakan defaultkata kunci. Sebagai contoh,

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

Mengapa metode default?

Mari kita ambil skenario untuk memahami mengapa metode default diperkenalkan di Java.

Misalkan, kita perlu menambahkan metode baru dalam sebuah antarmuka.

Kami dapat menambahkan metode di antarmuka kami dengan mudah tanpa implementasi. Namun, itu bukanlah akhir dari cerita. Semua kelas kita yang mengimplementasikan antarmuka itu harus menyediakan implementasi untuk metode tersebut.

Jika sejumlah besar kelas mengimplementasikan antarmuka ini, kita perlu melacak semua kelas ini dan membuat perubahan di dalamnya. Ini tidak hanya membosankan tetapi juga rawan kesalahan.

Untuk mengatasi ini, Java memperkenalkan metode default. Metode default diwariskan seperti metode biasa.

Mari kita ambil contoh untuk lebih memahami metode default.

Contoh: Metode Default di Antarmuka 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(); ) )

Keluaran

Luas persegi panjang adalah 30 Saya memiliki 4 sisi. Luas persegi adalah 25 Saya bisa mendapatkan sisi poligon.

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.

Namun, aturan untuk menghitung luas berbeda untuk poligon yang berbeda. Karenanya, getArea()disertakan tanpa implementasi.

Setiap kelas yang mengimplementasikan Polygon harus menyediakan implementasi getArea().

Artikel yang menarik...