CodeGym /Blog Java /rawak /Antara muka di Jawa
John Squirrels
Tahap
San Francisco

Antara muka di Jawa

Diterbitkan dalam kumpulan
Seperti yang anda ketahui, segala-galanya dalam Java terdiri daripada objek, dan objek mempunyai keadaan (medan) dan tingkah laku (ditakrifkan oleh kaedah). Tingkah laku kelas adalah apa yang boleh mengikatnya ke kelas lain. Tingkah laku boleh mempunyai ciri yang berbeza, dan kadangkala lebih mudah untuk mengalihkannya ke luar kelas, terutamanya apabila ia melibatkan interaksi dengan dunia luar. Sama seperti alat kawalan jauh TV berada di luar "kotak" itu sendiri. Alat kawalan jauh ialah antara muka untuk interaksi pengguna dengan fungsi TV. Sebagai contoh, anda boleh bayangkan kelas yang melaksanakan kapal terbang atau helikopter abstrak. Objek kedua-dua kelas seperti kebanyakan burung boleh terbang, dan mereka semua melakukannya secara berbeza. Mungkin berbaloi untuk memindahkan ciri ini ke dalam entiti yang berasingan, dan semua "flyer" yang berpotensi akan diwarisi daripada entiti ini? Jika anda sudah biasa dengan kelas abstrak, anda hanya boleh mencipta kelas abstrak Boleh Terbang dan "mewarisi" kelas Copter dan Plane daripadanya. Namun, bagaimana jika terdapat beberapa hartanah sedemikian? Sebagai contoh, kapal terbang dan helikopter boleh terbang, tetapi juga bergerak di atas tanah. Walaupun kami mencipta kelas Ride, kami tidak lagi boleh menetapkan Copter dan Plane kepadanya. Lagipun, setiap kelas Java hanya mempunyai satu kelas induk. Antara muka dalam Java - 1Menggunakan antara muka dalam bahasa Java sebahagiannya menyelesaikan masalah ini. Antara muka dalam Java mentakrifkan beberapa fungsi yang tidak mempunyai pelaksanaan khusus, yang kemudiannya dilaksanakan oleh kelas yang menggunakan antara muka ini. Dan satu kelas boleh melaksanakan banyak antara muka. Malah, dengan melaksanakan antara muka dalam Java, kami mengisytiharkan bahawa kelas kami boleh melakukan sesuatu, kami melaporkan tingkah lakunya. Kami sudah melaksanakan pelaksanaan konkrit tingkah laku di dalam kelas. Jadi. kapal terbang dan helikopter berlepas secara berbeza: kapal terbang memerlukan landasan, manakala helikopter biasanya berlepas secara menegak. Butiran sedemikian paling baik dilaksanakan dalam kelas.

Antara muka di Jawa

Untuk menentukan antara muka dalam bahasa Java, kata kunci antara muka digunakan. Sebagai contoh:
interface Voice {

    void talk();
}
Antara muka di atas dipanggil Voice . Antara muka dalam Java mungkin mentakrifkan pemalar dan kaedah, yang mungkin mempunyai pelaksanaan atau tidak. Biasanya, kaedah antara muka tidak mempunyai pelaksanaan, sama seperti dalam contoh ini. Kaedah dalam antara muka tanpa pelaksanaan adalah seperti kaedah abstrak kelas abstrak. Kaedah antara muka biasanya tidak mempunyai pengubah akses. Walau bagaimanapun, akses sebenarnya awam secara lalai kerana tujuan antara muka adalah untuk menentukan kefungsian untuk pelaksanaan kelas. Oleh itu, semua fungsi harus terbuka untuk pelaksanaan. Untuk melaksanakan antara muka, gunakan kata kunci Implements semasa mengisytiharkan kelas anda. Selain itu, jika antara muka mengandungi kaedah tanpa pelaksanaan, maka kaedah itu mesti dilaksanakan dalam kelas pelaksana.
public class Duck implements Voice {


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


    }

Contoh kod antara muka

Mari kita ambil contoh yang lebih lengkap. Setiap (baik, hampir setiap) haiwan mempunyai keupayaan untuk membuat bunyi. Mari buat antara muka Java Voice untuk kes ini. Ia mempunyai kaedah talk() tanpa pelaksanaan.
public interface Voice {
   void talk();
}
Kini semua kelas yang menyokong antara muka Suara mesti mempunyai pelaksanaan kaedah talk() . Mari buat dua kelas — Kucing dan Anjing dan nyatakan bahawa mereka melaksanakan antara muka Suara . Dalam kes ini, jika anda tidak melaksanakan kelas di dalamnya, program itu tidak akan berfungsi. Kaedah pelaksanaan adalah sangat mudah. Apabila memanggil kaedah talk() objek kelas Cat , teks yang setara dengan meow akan dipaparkan pada skrin, dalam kes kelas Anjing , kulit kayu. Kami juga akan menambah getter, setter dan pembina pada 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");
   }
}
Malah, pelaksanaan kelas dan kaedah kami sangat serupa. Mari buat kelas lain, Parrot , dengan sokongan Suara . Hanya kaedah talk() akan berfungsi secara berbeza di dalamnya: pengguna akan memasukkan rentetan ke dalam konsol, dan burung nuri akan "mengulangi"nya menggunakan kaedah 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 cipta kelas ujian dan lihat hasil yang akan dihasilkan oleh program jika kita memanggil kaedah talk() objek kelas Cat , Dog dan Parrot secara bergilir.
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();
   }
}
Output adalah di bawah. Teks hijau ialah satu pengguna yang dicetak dalam konsol.
meow... WOF WOF APA yang perlu saya ulangi selepas anda?... Saya sangat bercakap dan pandai burung Saya sangat bercakap dan pandai burung

Kaedah Lalai

Sebelum keluaran JDK 8 apabila melaksanakan antara muka dalam Java, kami perlu melaksanakan semua kaedahnya dalam kelas. Pada masa yang sama, antara muka Java itu sendiri boleh mengandungi hanya definisi kaedah tanpa pelaksanaan tertentu. JDK 8 menambah fungsi baharu — kaedah lalai. Kini antara muka Java boleh mempunyai bukan sahaja definisi kaedah tetapi juga pelaksanaan lalai. Ia digunakan jika kelas melaksanakan antara muka tetapi tidak melaksanakan kaedah. Sebagai contoh, mari tukar kaedah talk() dalam antara muka Suara kepada kaedah lalai. Kami juga akan menulis kelas Itik yang didayakan Suara baharu yang tidak mempunyai pelaksanaan kaedah ceramah .
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 tukar kelas ujian kita sedikit.
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:
meow... WOF WOF saya boleh bercakap...
Nampak? Dalam objek kelas Anjing dan Kucing , kaedah overridden talk() dipanggil, tetapi dalam objek kelas Duck , kaedah lalai daripada antara muka dipanggil. Oleh itu, kaedah lalai hanyalah kaedah tanpa pengubah dan ditandakan dengan kata kunci lalai. Kami tidak perlu melaksanakan kaedah lalai dalam kelas yang melaksanakan antara muka, tetapi kami boleh mengatasinya.

Kaedah Statik

Oleh kerana kaedah statik JDK 8 tersedia dalam antara muka Java — ia serupa dengan kaedah kelas:
interface Voice {

    void talk();

    static void check(){

        System.out.println("checked...");
    }
}
Untuk merujuk kepada kaedah statik antara muka, sama seperti dalam kes kelas, tulis nama antara muka dan kaedah:
public static void main(String[] args) {

    Voice.check();
}

Pelbagai Pelaksanaan Antara Muka

Jika kita perlu menggunakan beberapa antara muka dalam kelas Java, maka semuanya disenaraikan dengan koma selepas perkataan implements :
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!!!");
    }

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