Kelas abstrak terlihat sangat mirip antarmuka, tetapi konsepnya agak membingungkan bagi pemula OOP. Secara konseptual, kelas abstrak terlihat seperti antarmuka, tentu saja, tanpa implementasi apa pun, namun mereka memiliki perbedaan yang adil. Sementara kelas abstrak dapat diimplementasikan sebagian atau sepenuhnya, sebuah antarmuka harus diimplementasikan sepenuhnya. Nah, perbedaan yang paling menonjol antara keduanya adalah bahwa kelas abstrak dapat memiliki implementasi standar, sedangkan antarmuka hanya definisi metode yang hanya berisi deklarasi anggota. Mari kita bahas aspek teoretis keduanya secara terperinci.
Kelas abstrak adalah jenis kelas khusus yang bertindak sebagai basis kelas lain dan tidak dapat dipakai. Logika implementasi dari kelas abstrak disediakan oleh kelas turunannya. Untuk membuat abstrak kelas, pengubah "abstrak" digunakan yang berarti beberapa implementasi yang hilang perlu diimplementasikan di kelas yang diturunkan darinya. Ini berisi anggota abstrak dan non-abstrak. Kelas abstrak dimaksudkan untuk menyediakan fungsionalitas dasar yang dapat dibagi lebih lanjut dan diganti oleh beberapa kelas turunan. Berguna untuk menghindari duplikasi kode apa pun. Mereka terlihat sangat mirip antarmuka tetapi dengan fungsionalitas tambahan.
Antarmuka, di sisi lain, bukan kelas yang hanya berisi tanda tangan fungsionalitas. Ini adalah pola tanpa implementasi. Secara konseptual, itu hanya definisi metode yang hanya berisi deklarasi anggota. Ini adalah shell kosong yang tidak mengandung implementasi anggotanya. Ini seperti kelas dasar abstrak yang hanya berisi anggota abstrak seperti metode, peristiwa, pengindeks, properti, dll. Itu tidak dapat dipakai secara langsung dan anggotanya dapat diimplementasikan oleh kelas mana pun. Selain itu, banyak antarmuka dapat diimplementasikan oleh suatu kelas, namun suatu kelas hanya dapat mewarisi satu kelas.
Kelas Abstrak | Antarmuka |
Kelas abstrak dapat memiliki semua pengubah akses untuk deklarasi fungsi, subs, dan properti anggota. | Antarmuka tidak diperbolehkan memiliki pengubah akses untuk pernyataan fungsi, subs, properti, dll. Semua anggota dianggap publik secara implisit. |
Sebuah kelas paling banyak hanya bisa menggunakan satu kelas abstrak. | Sebuah kelas dapat mewarisi sejumlah antarmuka. |
Multiple inheritance tidak didukung dalam kelas abstrak. | Antarmuka dapat mendukung banyak pewarisan. |
Secara teknis, ini adalah kelas yang mungkin mengandung atau tidak mengandung definisi dan implementasinya. | Antarmuka hanya dapat memiliki tanda tangan fungsionalitas sehingga pada dasarnya shell kosong. |
Kelas abstrak dapat berisi anggota. const, metode yang ditentukan, dan metode bertopik. | Antarmuka hanya dapat berisi metode dan konst. |
Ini mendefinisikan identitas inti kelas dan digunakan untuk menggambarkan objek dari tipe data yang sama. | Ini digunakan untuk menggambarkan kemampuan periferal suatu kelas. |
Anggota kelas abstrak tidak boleh statis kecuali anggota lengkap. | Anggota antarmuka tidak boleh statis. |
Ini ideal untuk implementasi dengan jenis dan perilaku yang sama. | Lebih baik menggunakan antarmuka jika beberapa implementasi hanya membagikan tanda tangan metode. |
Itu dapat memiliki deklarasi konstruktor. | Tidak dapat memiliki deklarasi konstruktor. |
Kelas abstrak memiliki bidang dan batasan yang telah ditentukan sebelumnya. | Bidang tidak dapat didefinisikan dalam antarmuka. |
Ini dapat memiliki metode abstrak dan non-abstrak. | Itu hanya dapat memiliki metode abstrak. |
Apa perbedaan antara kelas abstrak dan antarmuka? Ini mungkin salah satu pertanyaan paling umum yang diajukan dalam wawancara teknis. Anda mungkin menemukan sejumlah besar informasi tentang kelas dan antarmuka abstrak dalam tutorial C # apa pun, namun memahami perbedaan antara keduanya adalah bagian yang cukup sulit. Anda dapat menggabungkan semua informasi yang dapat Anda temukan dan masih belum cukup. Yah, secara konseptual keduanya adalah istilah yang paling penting dalam pemrograman dan cukup sama, namun keduanya sangat berbeda dalam hal fungsionalitas. Sementara kelas abstrak adalah jenis kelas khusus yang bertindak sebagai basis untuk kelas lain, antarmuka, di sisi lain, hanyalah shell kosong dengan hanya deklarasi anggota.