Apabila mereka bentuk perisian dalam Java, memilih antara kelas abstrak dan antara muka boleh memberi impak besar pada fleksibiliti, kebolehselenggaraan dan kebolehbacaan. Dalam siaran ini, kami akan meneroka perbezaan utama mereka, masa untuk menggunakan satu daripada yang lain dan melihat contoh praktikal untuk membantu anda menguasai konsep ini.
Feature | Abstract Class | Interface |
---|---|---|
Purpose | Achieves partial implementation | Achieves complete abstraction |
Method Implementations | Can have both abstract and concrete methods | All methods are abstract (except default/static methods in Java 8 ) |
Multiple Inheritance | A class can extend only one abstract class | A class can implement multiple interfaces |
Fields/Variables | Can have instance variables of any type | All variables are implicitly public, static, and final |
Constructors | Can have constructors | Cannot have constructors |
Inheritance Support | Can implement multiple interfaces | Cannot extend an abstract class |
Use Case | Useful for sharing common code and state | Useful for defining a contract across unrelated classes |
Anda perlu berkongsi keadaan atau tingkah laku merentas kelas yang berkaitan.
Contoh: Pekerja boleh mempunyai medan seperti nama dan id dengan kaedah getDetails() yang biasa, dikongsi antara Pengurus dan Pemimpin subkelasnya.
abstract class Employee { String name; int id; Employee(String name, int id) { this.name = name; this.id = id; } // Concrete method shared among subclasses public void getDetails() { System.out.println(name + " (ID: " + id + ")"); } // Abstract method to be implemented by subclasses abstract double getSalary(); } class Manager extends Employee { Manager(String name, int id) { super(name, id); } @Override double getSalary() { return 75000; } }
Anda ingin menentukan medan dan pembina yang boleh digunakan oleh subkelas.
Anda perlu menyediakan pelaksanaan separa atau kaedah utiliti untuk subkelas.
Anda ingin mentakrifkan gelagat biasa merentas kelas yang tidak berkaitan.
Contoh: Kedua-dua Kereta dan Drone boleh melaksanakan antara muka Boleh Dikendali, kerana kedua-duanya berkongsi kaedah mula() tetapi merupakan kelas yang tidak berkaitan.
interface Operable { void start(); void stop(); } class Car implements Operable { @Override public void start() { System.out.println("Car started."); } @Override public void stop() { System.out.println("Car stopped."); } } class Drone implements Operable { @Override public void start() { System.out.println("Drone started."); } @Override public void stop() { System.out.println("Drone stopped."); } }
Anda memerlukan warisan berbilang untuk menggabungkan gelagat yang berbeza. Sebagai contoh, kelas boleh melaksanakan kedua-dua Runnable dan Serializable.
Anda ingin mentakrifkan kaedah lalai untuk menambah fungsi baharu tanpa memecahkan keserasian ke belakang.
Mengapa Antara Muka Tidak Boleh Mempunyai Pembina?
Memandangkan antara muka mentakrifkan abstraksi tulen, tidak ada keperluan untuk pembina. Hanya kelas abstrak, yang mengandungi beberapa pelaksanaan, memerlukan pembina untuk memulakan keadaan.
Mengapa Menggunakan Kelas Abstrak Daripada Antara Muka?
Gunakan kelas abstrak apabila:
Bolehkah Kelas Abstrak Melaksanakan Antara Muka?
Ya! Kelas abstrak boleh melaksanakan satu atau lebih antara muka. Mereka juga boleh menyediakan pelaksanaan lalai untuk kaedah antara muka.
Bolehkah Anda Menggunakan Kedua-dua Kelas Abstrak dan Antara Muka dalam Kelas Yang Sama?
Ya, kelas boleh melanjutkan kelas abstrak dan melaksanakan berbilang antara muka. Ini membolehkan corak reka bentuk yang fleksibel dan pelbagai warisan.
Dengan menguasai perbezaan dan mengetahui masa untuk menggunakannya, anda akan lebih bersedia untuk mereka bentuk sistem perisian boleh skala dan boleh diselenggara.
Asas Java
Keperluan Temuduga Tatasusunan
Java Memory Essentials
Java Keywords Essentials
Kerangka Koleksi Penting
Selamat Pengekodan!
Atas ialah kandungan terperinci Abstraksi: Kelas Abstrak vs Antara Muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!