CodeGym /Java Blog /Acak /Antarmuka di Java
John Squirrels
Level 41
San Francisco

Antarmuka di Java

Dipublikasikan di grup Acak
Seperti yang Anda ketahui, segala sesuatu di Java terdiri dari objek, dan objek memiliki status (bidang) dan perilaku (ditentukan oleh metode). Perilaku suatu kelas inilah yang dapat mengikatnya dengan kelas lain. Perilaku dapat memiliki karakteristik yang berbeda-beda, dan terkadang lebih mudah untuk memindahkannya ke luar kelas, terutama ketika berinteraksi dengan dunia luar. Sama seperti remote control TV yang berada di luar “kotak” itu sendiri. Remote control adalah antarmuka untuk interaksi pengguna dengan fungsi TV. Misalnya, Anda dapat membayangkan sebuah kelas yang mengimplementasikan pesawat terbang atau helikopter abstrak. Objek dari kedua kelas seperti kebanyakan burung dapat terbang, dan mereka semua melakukannya secara berbeda. Mungkin ada baiknya memindahkan fitur ini ke entitas terpisah, dan semua calon “penerbang” akan diwarisi dari entitas ini? Jika Anda sudah familiar dengan kelas abstrak, Anda cukup membuat kelas abstrak Flyable dan “mewarisi” kelas Copter dan Plane darinya. Namun, bagaimana jika ada beberapa properti seperti itu? Misalnya, pesawat terbang dan helikopter bisa terbang, tetapi juga bisa bergerak di darat. Bahkan jika kita membuat kelas Ride, kita tidak bisa lagi menugaskan Copter dan Plane ke dalamnya. Lagi pula, setiap kelas Java hanya memiliki satu kelas induk. Antarmuka di Java - 1Menggunakan antarmuka dalam bahasa Java sebagian memecahkan masalah ini. Antarmuka di Java mendefinisikan beberapa fungsionalitas yang tidak memiliki implementasi spesifik, yang kemudian diimplementasikan oleh kelas yang menggunakan antarmuka tersebut. Dan satu kelas dapat mengimplementasikan banyak antarmuka. Faktanya, dengan mengimplementasikan antarmuka di Java, kami mendeklarasikan bahwa kelas kami dapat melakukan sesuatu, kami melaporkan perilakunya. Implementasi perilaku secara konkrit sudah kita laksanakan di kelas. Jadi. pesawat terbang dan helikopter lepas landas secara berbeda: pesawat membutuhkan landasan pacu, sedangkan helikopter biasanya lepas landas secara vertikal. Detail seperti itu paling baik diterapkan di dalam kelas.

Antarmuka di Java

Untuk mendefinisikan antarmuka dalam bahasa Java, digunakan kata kunci antarmuka. Misalnya:
interface Voice {

    void talk();
}
Antarmuka di atas disebut Voice . Antarmuka di Java dapat mendefinisikan konstanta dan metode, yang mungkin memiliki implementasi atau tidak. Biasanya, metode antarmuka tidak memiliki implementasi, seperti pada contoh ini. Metode dalam antarmuka tanpa implementasi seperti metode abstrak dari kelas abstrak. Metode antarmuka biasanya tidak memiliki pengubah akses. Namun akses sebenarnya bersifat publik secara default karena tujuan antarmuka adalah untuk mendefinisikan fungsionalitas untuk implementasi kelas. Oleh karena itu, semua fungsi harus terbuka untuk implementasi. Untuk mengimplementasikan antarmuka, gunakan kata kunci Implements saat mendeklarasikan kelas Anda. Terlebih lagi, jika sebuah antarmuka berisi metode tanpa implementasi, maka metode tersebut harus diimplementasikan di kelas pelaksana.
public class Duck implements Voice {


@Override
public void voice() {
   System.out.println("Quack");
}


    }

Contoh kode antarmuka

Mari kita ambil contoh yang lebih lengkap. Setiap (hampir setiap) hewan memiliki kemampuan mengeluarkan suara. Mari kita buat antarmuka Java Voice untuk kasus ini. Ia memiliki metode talk() tanpa implementasi.
public interface Voice {
   void talk();
}
Sekarang semua kelas yang mendukung antarmuka Voice harus memiliki implementasi metode talk() . Mari kita buat dua kelas — Kucing dan Anjing dan tunjukkan bahwa keduanya mengimplementasikan antarmuka Suara . Dalam hal ini, jika Anda tidak mengimplementasikan kelas di dalamnya, program tidak akan berfungsi. Metode penerapannya sangat sederhana. Saat memanggil metode talk() dari objek kelas Cat , teks yang setara dengan mengeong akan ditampilkan di layar, dalam kasus kelas Anjing , gonggongan. Kami juga akan menambahkan getter, setter, dan konstruktor ke kelas.
public class Cat implements Voice {
   String name;
   String breed;
   int year;

   public Cat(String name, String breed, int year) {
       this.name = name;
       this.breed = breed;
       this.year = year;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getBreed() {
       return breed;
   }

   public void setBreed(String breed) {
       this.breed = breed;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       System.out.println("meow...");
   }
}
public class Dog implements Voice {
   String name;
   String color;
   int year;

   public Dog(String name, String color, int year) {
       this.name = name;
       this.color = color;
       this.year = year;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       System.out.println("WOF WOF");
   }
}
Faktanya, implementasi kelas dan metode kami sangat mirip. Mari buat kelas lain, Parrot , dengan dukungan Voice . Hanya metode talk() yang akan bekerja secara berbeda di dalamnya: pengguna akan memasukkan string ke konsol, dan burung beo akan “mengulanginya” menggunakan metode talk() .
import java.util.Scanner;

public class Parrot implements Voice {
   String name;
   String color;
   int year;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       Scanner scanner = new Scanner(System.in);
       System.out.println("WHat should I repeat after you?...");
       String s =  scanner.nextLine();
       System.out.println(s);
   }
}
Sekarang mari kita buat kelas pengujian dan lihat hasil apa yang akan dihasilkan oleh program jika kita memanggil metode talk() dari objek kelas Cat , Dog , dan Parrot secara bergantian.
public class InterfaceDemo {
   public static void main(String[] args) {
       Cat cat = new Cat ("Mewie", "Siam" ,2021);
       cat.talk();
       Dog dog = new Dog("Snoopy", "White and black", 2020);
       dog.talk();
       Parrot parrot = new Parrot();
       parrot.talk();
   }
}
Outputnya ada di bawah. Teks hijau adalah teks yang dicetak pengguna di konsol.
meong... WOF WOF APA yang harus aku ulangi setelah kamu?... Aku burung yang banyak bicara dan pandai Aku burung yang sangat banyak bicara dan pandai

Metode Bawaan

Sebelum rilis JDK 8 saat mengimplementasikan antarmuka di Java, kami harus mengimplementasikan semua metodenya di sebuah kelas. Pada saat yang sama, antarmuka Java itu sendiri hanya dapat berisi definisi metode tanpa implementasi khusus. JDK 8 menambahkan fungsionalitas baru — metode default. Sekarang antarmuka Java tidak hanya memiliki definisi metode tetapi juga implementasi default. Mereka digunakan jika kelas mengimplementasikan antarmuka tetapi tidak mengimplementasikan metodenya. Misalnya, mari kita ubah metode talk() di antarmuka Voice ke metode default. Kami juga akan menulis kelas Bebek yang mendukung Suara yang tidak memiliki implementasi metode bicara .
public interface Voice {
   default void talk() {
       System.out.println("I can talk...");
   }
}
public class Duck implements Voice {

   public void moveForward() {
       System.out.println(" Quack, I am moving forward...");
   }

   public void TurnRight(){
       System.out.println("I am turning right...");
   }
   public void TurnLeft(){
       System.out.println("I am turning left...");

   }

   public void Stop() {
       System.out.println("Quack. I am relaxing on the surface of the water...");
   }

   public void fly(){
       System.out.println("I am flying!!!");
   }

}
Sekarang mari kita ubah sedikit kelas pengujian kita.
public class InterfaceDemo {
   public static void main(String[] args) {
       Cat cat = new Cat ("Mewie", "Siam" ,2021);
       cat.talk();
       Dog dog = new Dog("Snoopy", "White and black", 2020);
       dog.talk();
       Duck duck = new Duck();
       duck.talk();
   }
}
Outputnya ada di sini:
meong... WOF WOF aku bisa bicara...
Melihat? Dalam objek kelas Anjing dan Kucing , metode talk() yang diganti dipanggil, tetapi dalam objek kelas Bebek , metode default dari antarmuka dipanggil. Jadi, metode default hanyalah metode tanpa pengubah dan ditandai dengan kata kunci default. Kita tidak harus mengimplementasikan metode default di kelas yang mengimplementasikan antarmuka, tapi kita bisa menggantinya.

Metode Statis

Karena metode statis JDK 8 tersedia di antarmuka Java — metode ini mirip dengan metode kelas:
interface Voice {

    void talk();

    static void check(){

        System.out.println("checked...");
    }
}
Untuk merujuk ke metode statis suatu antarmuka, seperti halnya kelas, tuliskan nama antarmuka dan metodenya:
public static void main(String[] args) {

    Voice.check();
}

Beberapa Implementasi Antarmuka

Jika kita perlu menerapkan beberapa antarmuka di kelas Java, maka semuanya dicantumkan dengan koma setelah kata mengimplementasikan :
public class Duck implements Swimmable, Flyable, Voice {

    public void moveForward() {
        System.out.println(" Quack, I am moving forward...");
    }

    public void TurnRight(){
        System.out.println("I am turning right...");
    }
    public void TurnLeft(){
        System.out.println("I am turning left...");

    }

    public void Stop() {
        System.out.println("Quack. I am relaxing on the surface of the water...");
    }

    public void fly(){
        System.out.println("I am flying!!!");
    }

}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION