Rumah  >  Artikel  >  Java  >  Abstraksi: Kelas Abstrak vs Antara Muka

Abstraksi: Kelas Abstrak vs Antara Muka

Patricia Arquette
Patricia Arquetteasal
2024-11-03 16:43:02270semak imbas

Abstraction: Abstract Class vs Interface

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.


Perbezaan Utama Antara Kelas Abstrak dan Antara Muka

Ciri Kelas Abstrak Antaramuka
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
Tujuan Mencapai pelaksanaan separa Mencapai abstraksi lengkap Pelaksanaan Kaedah Boleh mempunyai kedua-dua kaedah abstrak dan konkrit Semua kaedah adalah abstrak (kecuali kaedah lalai/statik dalam Java 8 ) Warisan Berbilang Kelas boleh melanjutkan hanya satu kelas abstrak Kelas boleh melaksanakan berbilang antara muka Bidang/Pembolehubah Boleh mempunyai pembolehubah contoh dari sebarang jenis Semua pembolehubah secara tersirat awam, statik dan muktamad Pembina Boleh mempunyai pembina Tidak boleh mempunyai pembina Sokongan Warisan Boleh melaksanakan berbilang antara muka Tidak boleh melanjutkan kelas abstrak Kes Penggunaan Berguna untuk berkongsi kod dan keadaan biasa Berguna untuk menentukan kontrak merentas kelas yang tidak berkaitan table>

Bila Menggunakan Kelas Abstrak vs Antara Muka?

Gunakan Kelas Abstrak Apabila:

  • 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.

Gunakan Antara Muka Apabila:

  • 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.


Wawasan Temu Bual

Soalan Temuduga Biasa:

  1. 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.

  2. Mengapa Menggunakan Kelas Abstrak Daripada Antara Muka?

    Gunakan kelas abstrak apabila:

    • Anda perlu berkongsi kod antara kelas yang berkaitan.
    • Anda ingin mentakrifkan keadaan (medan) dan pembina.
  3. 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.

  4. 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.


Ringkasan

  • Kelas abstrak sesuai apabila anda memerlukan pelaksanaan separa dan keadaan dikongsi merentas kelas yang berkaitan. Mereka membenarkan medan biasa, pembina, dan kaedah utiliti.
  • Antaramuka paling sesuai untuk abstraksi lengkap, warisan berbilang dan mentakrifkan gelagat biasa untuk kelas yang tidak berkaitan. Ia membolehkan anda mengembangkan pangkalan kod anda dengan kaedah lalai sambil mengekalkan keserasian ke belakang.

Dengan menguasai perbezaan dan mengetahui masa untuk menggunakannya, anda akan lebih bersedia untuk mereka bentuk sistem perisian boleh skala dan boleh diselenggara.


Catatan Berkaitan

  • 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn