Bagaimanakah anda memutuskan bila hendak menggunakan antara muka dan bila hendak menggunakan kelas abstrak? Mari pecahkannya.
Berbilang Pelaksanaan: Gunakan antara muka apabila anda menjangkakan berbilang kelas untuk melaksanakan set kaedah yang sama tetapi dengan logik yang berbeza. Contohnya, anda mungkin mempunyai antara muka Boleh Dipandu yang dilaksanakan oleh Kereta dan Bot, masing-masing dengan cara "memandu" tersendiri.
Gandingan Longgar: Antara muka sesuai apabila anda ingin memisahkan kod anda. Jika anda mentakrifkan kaedah dalam antara muka, anda boleh menukar pelaksanaan yang berbeza tanpa mengubah kod yang menggunakan kaedah tersebut.
Kod Dikongsi: Gunakan kelas abstrak apabila anda mempunyai beberapa tingkah laku biasa (kaedah) yang harus dikongsi merentas semua subkelas, tetapi anda juga ingin menguatkuasakan peraturan tertentu dengan memerlukan kaedah tertentu dilaksanakan.
Warisan Tunggal: Jika anda tahu bahawa kelas harus diwarisi daripada satu kelas induk sahaja dan kelas induk ini harus menyediakan beberapa kefungsian asas, kelas abstrak adalah cara yang perlu dilakukan.
Secara amnya, antara muka mungkin membawa kepada prestasi yang lebih perlahan disebabkan oleh penyimpangan dalam panggilan kaedah (terutamanya sebelum Java 8). Walau bagaimanapun, perbezaan itu biasanya boleh diabaikan dan tidak sepatutnya menjadi faktor penentu melainkan dalam situasi kritikal prestasi.
Bayangkan anda mereka bentuk sistem untuk pelbagai jenis kaedah pembayaran:
Contoh Antara Muka: Tentukan antara muka Berbayar untuk kaedah pembayaran yang berbeza seperti CreditCard, PayPal dan Bitcoin. Setiap satu melaksanakan kaedah processPayment() secara berbeza.
Contoh Kelas Abstrak: Katakan anda juga ingin mengumpulkan semua kaedah pembayaran dalam talian. Anda boleh membuat OnlinePayment kelas abstrak yang melaksanakan kaedah untuk menyambung ke get laluan pembayaran tetapi membiarkan kaedah pemprosesan pembayaran tertentu (processPayment()) ditakrifkan oleh subkelas seperti CreditCard atau PayPal.
public interface Payable { void processPayment(double amount); } public abstract class OnlinePayment implements Payable { void connectToGateway() { System.out.println("Connecting to online payment gateway..."); } } public class CreditCard extends OnlinePayment { public void processPayment(double amount) { connectToGateway(); System.out.println("Processing credit card payment of " + amount + " €"); } }
Memandangkan senario di mana anda mempunyai jenis pengguna yang berbeza (Pentadbir, Tetamu, Berdaftar), fikirkan sama ada anda akan menggunakan antara muka, kelas abstrak atau kedua-duanya. Reka bentuk struktur ringkas dan laksanakan dalam Java.
Memilih antara antara muka dan kelas abstrak tidak selalunya mudah, tetapi memahami kekuatan dan kelemahan setiap kelas boleh membantu anda membuat keputusan terbaik untuk reka bentuk anda. Antara muka menawarkan fleksibiliti dan keupayaan untuk melaksanakan berbilang gelagat, manakala kelas abstrak menyediakan asas yang kukuh dengan fungsi yang dikongsi.
Atas ialah kandungan terperinci Antara Muka lwn Kelas Abstrak – Bila Nak Gunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!