Antara muka Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan membincangkan mengenai antara muka di Java. Kami juga akan melihat bagaimana Java menggunakannya untuk melaksanakan polimorfisme dan pelbagai warisan.

2. Apakah Interface di Java?

Di Jawa, antarmuka adalah jenis abstrak yang berisi kumpulan kaedah dan pemboleh ubah tetap. Ini adalah salah satu konsep teras di Jawa dan digunakan untuk mencapai abstraksi, polimorfisme dan pelbagai warisan .

Mari kita lihat contoh ringkas antara muka di Java:

public interface Electronic { // Constant variable String LED = "LED"; // Abstract method int getElectricityUse(); // Static method static boolean isEnergyEfficient(String electtronicType) { if (electtronicType.equals(LED)) { return true; } return false; } //Default method default void printDescription() { System.out.println("Electronic Description"); } } 

Kita dapat melaksanakan antaramuka dalam kelas Java dengan menggunakan kata kunci alat .

Seterusnya, mari kita buat kelas Komputer yang menerapkan antara muka Elektronik yang baru kita buat:

public class Computer implements Electronic { @Override public int getElectricityUse() { return 1000; } } 

2.1. Peraturan untuk Membuat Antaramuka

Di antara muka, kami dibenarkan menggunakan:

  • pemboleh ubah pemalar
  • kaedah abstrak
  • kaedah statik
  • kaedah lalai

Kita juga harus ingat bahawa:

  • kita tidak dapat mewujudkan antara muka secara langsung
  • antara muka boleh kosong, tanpa kaedah atau pemboleh ubah di dalamnya
  • kita tidak dapat menggunakan kata akhir dalam definisi antara muka, kerana akan menghasilkan kesalahan penyusun
  • semua pernyataan antara muka harus mempunyai pengubah suai akses awam atau lalai; yang abstrak pengubahsuai akan ditambah secara automatik oleh pengkompil
  • kaedah antara muka tidak boleh bersifat peribadi , dilindungi , atau terakhir
  • pemboleh ubah antara muka adalah umum , statik , dan akhir mengikut definisi; kami tidak dibenarkan mengubah keterlihatan mereka

3. Apa yang Boleh Kita Capai dengan Menggunakannya?

3.1. Fungsi Tingkah Laku

Kami menggunakan antara muka untuk menambahkan fungsi tingkah laku tertentu yang dapat digunakan oleh kelas yang tidak berkaitan. Sebagai contoh, Comparable , Comparator , dan Cloneable adalah antaramuka Java yang dapat dilaksanakan oleh kelas yang tidak berkaitan. Berikut adalah contoh antara muka Perbandinganyang digunakan untuk membandingkan dua keadaan kelas Pekerja :

public class Employee { private double salary; public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } } public class EmployeeSalaryComparator implements Comparator { @Override public int compare(Employee employeeA, Employee employeeB) { if (employeeA.getSalary()  employeeB.getSalary()) { return 1; } else { return 0; } } } 

Untuk maklumat lebih lanjut, sila kunjungi tutorial kami mengenai Comparator and Comparable di Java.

3.2. Warisan Pelbagai

Kelas Java menyokong warisan tunggal. Namun, dengan menggunakan antaramuka, kami juga dapat menerapkan pelbagai warisan.

Sebagai contoh, dalam contoh di bawah ini, kita perhatikan bahawa kelas Keretamelaksanakan antara muka Fly dan Transform . Dengan melakukannya, ia mewarisi kaedah terbang dan mengubah :

public interface Transform { void transform(); } public interface Fly { void fly(); } public class Car implements Fly, Transform { @Override public void fly() { System.out.println("I can Fly!!"); } @Override public void transform() { System.out.println("I can Transform!!"); } } 

3.3. Polimorfisme

Mari kita mulakan dengan mengemukakan soalan: apa itu polimorfisme? Ini adalah kemampuan untuk objek untuk mengambil bentuk yang berbeza semasa waktu proses. Untuk lebih spesifik, pelaksanaan kaedah ganti adalah berkaitan dengan jenis objek tertentu pada waktu runtime.

Di Jawa, kita dapat mencapai polimorfisme menggunakan antara muka. Contohnya, antara muka Shape boleh mengambil bentuk yang berbeza - ia boleh menjadi Circle atau Square.

Mari mulakan dengan menentukan antara muka Shape :

public interface Shape { String name(); } 

Sekarang mari kita buat kelas Lingkaran :

public class Circle implements Shape { @Override public String name() { return "Circle"; } } 

Dan juga kelas Square :

public class Square implements Shape { @Override public String name() { return "Square"; } } 

Akhirnya, sudah tiba masanya untuk melihat polimorfisme dalam tindakan menggunakan antara muka Shape dan pelaksanaannya. Mari kita buat beberapa objek Bentuk , tambahkannya ke dalam Senarai , dan, akhirnya, cetak nama mereka dalam satu gelung:

List shapes = new ArrayList(); Shape circleShape = new Circle(); Shape squareShape = new Square(); shapes.add(circleShape); shapes.add(squareShape); for (Shape shape : shapes) { System.out.println(shape.name()); } 

4. Kaedah Lalai dalam Antaramuka

Antaramuka tradisional di Java 7 dan ke bawah tidak menawarkan keserasian ke belakang.

Maksudnya ialah jika anda mempunyai kod warisan yang ditulis di Java 7 atau lebih awal, dan anda memutuskan untuk menambahkan kaedah abstrak ke antara muka yang ada, maka semua kelas yang melaksanakan antara muka tersebut harus menggantikan kaedah abstrak yang baru . Jika tidak, kodnya akan rosak.

Java 8 menyelesaikan masalah ini dengan memperkenalkan kaedah lalai yang bersifat opsional dan dapat dilaksanakan di tingkat antara muka.

5. Peraturan Warisan Antara Muka

Untuk mencapai pelbagai warisan melalui antara muka, kita harus ingat beberapa peraturan. Mari kita bahas secara terperinci.

5.1. Antara Muka Memperluas Antara Muka Lain

When an interface extends another interface, it inherits all of that interface's abstract methods. Let's start by creating two interfaces, HasColor and Shape:

public interface HasColor { String getColor(); } public interface Box extends HasColor { int getHeight() } 

In the example above, Box inherits from HasColor using the keyword extends. By doing so, the Box interface inherits getColor. As a result, the Box interface now has two methods: getColor and getHeight.

5.2. Abstract Class Implementing an Interface

When an abstract class implements an interface, it inherits all of its abstract and default methods. Let's consider the Transform interface and the abstract class Vehicle that implements it:

public interface Transform { void transform(); default void printSpecs(){ System.out.println("Transform Specification"); } } public abstract class Vehicle implements Transform {} 

In this example, the Vehicle class inherits two methods: the abstract transform method and the default printSpecs method.

6. Functional Interfaces

Java has had many functional interfaces since its early days, such as Comparable (since Java 1.2) and Runnable (since Java 1.0).

Java 8 memperkenalkan antara muka fungsi baru seperti Predicate , Consumer , dan Function . Untuk mengetahui lebih lanjut mengenai ini, sila kunjungi tutorial kami mengenai Fungsi Antaramuka di Java 8.

7. Kesimpulannya

Dalam tutorial ini, kami memberikan gambaran keseluruhan antara muka Java, dan kami membincangkan bagaimana menggunakannya untuk mencapai polimorfisme dan pelbagai warisan.

Seperti biasa, sampel kod lengkap boleh didapati di GitHub.