Java - Antarmuka

Antarmuka adalah tipe referensi di Java. Ini mirip dengan kelas. Ini adalah kumpulan metode abstrak. Sebuah kelas mengimplementasikan sebuah antarmuka, sehingga mewarisi metode abstrak dari antarmuka.

Bersama dengan metode abstrak, antarmuka juga dapat berisi konstanta, metode default, metode statis, dan tipe bertingkat. Badan metode hanya ada untuk metode default dan metode statis.

Menulis antarmuka mirip dengan menulis kelas. Tetapi sebuah kelas mendeskripsikan atribut dan perilaku suatu objek. Dan antarmuka berisi perilaku yang diterapkan kelas.

Kecuali jika kelas yang mengimplementasikan antarmuka abstrak, semua metode antarmuka perlu didefinisikan di kelas.

Antarmuka mirip dengan kelas dengan cara berikut -

  • Antarmuka dapat berisi sejumlah metode.

  • Antarmuka ditulis dalam file dengan .java ekstensi, dengan nama antarmuka yang cocok dengan nama file.

  • Kode byte dari sebuah antarmuka muncul di a .class mengajukan.

  • Antarmuka muncul dalam paket, dan file bytecode yang sesuai harus berada dalam struktur direktori yang sesuai dengan nama paket.

Namun, antarmuka berbeda dari kelas dalam beberapa hal, termasuk -

  • Anda tidak dapat membuat contoh antarmuka.

  • Antarmuka tidak berisi konstruktor apa pun.

  • Semua metode dalam sebuah antarmuka bersifat abstrak.

  • Antarmuka tidak boleh berisi bidang contoh. Satu-satunya bidang yang dapat muncul di antarmuka harus dinyatakan sebagai statis dan final.

  • Antarmuka tidak diperluas oleh kelas; itu diimplementasikan oleh kelas.

  • Antarmuka dapat memperluas banyak antarmuka.

Mendeklarasikan Antarmuka

Itu interfacekata kunci digunakan untuk mendeklarasikan sebuah antarmuka. Berikut adalah contoh sederhana untuk mendeklarasikan sebuah antarmuka -

Contoh

Berikut adalah contoh antarmuka -

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

Antarmuka memiliki properti berikut -

  • Antarmuka abstrak secara implisit. Anda tidak perlu menggunakan fileabstract kata kunci sambil mendeklarasikan sebuah antarmuka.

  • Setiap metode dalam antarmuka juga abstrak secara implisit, jadi kata kunci abstrak tidak diperlukan.

  • Metode dalam sebuah antarmuka secara implisit bersifat publik.

Contoh

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

Menerapkan Antarmuka

Ketika sebuah kelas mengimplementasikan sebuah antarmuka, Anda dapat menganggap kelas tersebut sebagai penandatanganan kontrak, setuju untuk melakukan perilaku spesifik dari antarmuka tersebut. Jika sebuah kelas tidak melakukan semua perilaku antarmuka, kelas tersebut harus mendeklarasikan dirinya sebagai abstrak.

Kelas A menggunakan implementskata kunci untuk menerapkan antarmuka. Kata kunci implement muncul di deklarasi kelas setelah bagian deklarasi diperluas.

Contoh

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Mammal eats
Mammal travels

Saat mengganti metode yang ditentukan dalam antarmuka, ada beberapa aturan yang harus diikuti -

  • Pengecualian yang dicentang tidak boleh dideklarasikan pada metode implementasi selain yang dideklarasikan oleh metode antarmuka atau subkelas yang dideklarasikan oleh metode antarmuka.

  • Tanda tangan metode antarmuka dan tipe pengembalian atau subtipe yang sama harus dipertahankan saat mengganti metode.

  • Kelas implementasi itu sendiri bisa abstrak dan jika demikian, metode antarmuka tidak perlu diimplementasikan.

Saat mengimplementasikan antarmuka, ada beberapa aturan -

  • Sebuah kelas dapat mengimplementasikan lebih dari satu antarmuka pada satu waktu.

  • Sebuah kelas hanya dapat memperluas satu kelas, tetapi mengimplementasikan banyak antarmuka.

  • Antarmuka dapat memperluas antarmuka lain, dengan cara yang sama seperti kelas dapat memperluas kelas lain.

Memperluas Antarmuka

Antarmuka dapat memperluas antarmuka lain dengan cara yang sama seperti kelas dapat memperluas kelas lain. Ituextends kata kunci digunakan untuk memperluas antarmuka, dan antarmuka anak mewarisi metode antarmuka induk.

Antarmuka Olahraga berikut diperluas oleh antarmuka Hoki dan Sepak Bola.

Contoh

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Antarmuka Hoki memiliki empat metode, tetapi mewarisi dua dari Olahraga; dengan demikian, kelas yang menerapkan Hoki perlu menerapkan keenam metode tersebut. Demikian pula, kelas yang menerapkan Sepak Bola perlu mendefinisikan tiga metode dari Sepak Bola dan dua metode dari Olahraga.

Memperluas Beberapa Antarmuka

Kelas Java hanya dapat memperluas satu kelas induk. Warisan ganda tidak diperbolehkan. Namun, antarmuka bukanlah kelas, dan sebuah antarmuka dapat memperluas lebih dari satu antarmuka induk.

Kata kunci extends digunakan sekali, dan antarmuka induknya dideklarasikan dalam daftar yang dipisahkan koma.

Misalnya, jika antarmuka Hoki memperluas Olahraga dan Acara, itu akan dideklarasikan sebagai -

Contoh

public interface Hockey extends Sports, Event

Antarmuka Pemberian Tag

Penggunaan yang paling umum dari antarmuka perluasan terjadi ketika antarmuka induk tidak berisi metode apa pun. Misalnya, antarmuka MouseListener dalam paket java.awt.event diperpanjang java.util.EventListener, yang didefinisikan sebagai -

Contoh

package java.util;
public interface EventListener
{}

Antarmuka tanpa metode di dalamnya disebut sebagai a taggingantarmuka. Ada dua tujuan desain dasar untuk menandai antarmuka -

Creates a common parent- Seperti antarmuka EventListener, yang diperluas oleh lusinan antarmuka lain di Java API, Anda dapat menggunakan antarmuka pemberian tag untuk membuat induk umum di antara sekelompok antarmuka. Misalnya, ketika sebuah antarmuka memperluas EventListener, JVM mengetahui bahwa antarmuka khusus ini akan digunakan dalam skenario delegasi acara.

Adds a data type to a class- Situasi ini adalah asal dari istilah penandaan. Kelas yang mengimplementasikan antarmuka penandaan tidak perlu mendefinisikan metode apa pun (karena antarmuka tidak memilikinya), tetapi kelas tersebut menjadi tipe antarmuka melalui polimorfisme.