Perbedaan antara Kelas Abstrak dan Antarmuka dalam C #

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.

Apa itu Kelas Abstrak?

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.

Apa itu Antarmuka?

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 vs. Antarmuka: perbedaan antara Kelas Abstrak dan Antarmuka dalam C #

  1. Warisan Berganda - Kelas hanya dapat menggunakan satu kelas abstrak, karenanya banyak pewarisan tidak didukung. Antarmuka, di sisi lain, dapat mendukung multiple inheritance, yang berarti kelas dapat mewarisi sejumlah pewarisan.
  2. Definisi  dari Kelas Abstrak dan Antarmuka dalam C #- Kelas abstrak adalah jenis kelas khusus yang dapat berisi definisi tanpa implementasi. Logika implementasi disediakan oleh kelas turunannya. Ini dapat memiliki metode abstrak maupun non-abstrak. Antarmuka, di sisi lain, hanyalah pola yang tidak bisa melakukan apa-apa. Secara teknis, itu hanya kulit kosong.
  3. Penerapan - Kelas abstrak dapat berisi definisi dan implementasinya. Kelas yang tidak lengkap yang tidak bisa dipakai. Antarmuka hanya dapat memiliki tanda tangan fungsionalitas tanpa kode apa pun.
  4.  Akses Pengubah - Kelas abstrak dapat memiliki beberapa pengubah akses seperti subs, fungsi, properti, dll, sedangkan antarmuka tidak diizinkan memiliki pengubah akses dan semua metode harus secara implisit didefinisikan sebagai publik.
  5. Homogenitas - Kelas abstrak digunakan untuk implementasi dengan tipe, perilaku, dan status yang sama, sedangkan antarmuka digunakan untuk implementasi yang hanya berbagi tanda tangan metode.
  6. Pernyataan - Kelas abstrak bertindak sebagai kelas dasar untuk semua kelas lain sehingga dapat mendeklarasikan atau menggunakan variabel apa pun sementara antarmuka tidak diizinkan untuk mendeklarasikan variabel apa pun.
  7. Deklarasi Konstruktor - Sementara kelas abstrak dapat memiliki deklarasi konstruktor, sebuah antarmuka tidak dapat memiliki deklarasi konstruktor.
  8. Inti vs Periferal - Kelas abstrak digunakan untuk mendefinisikan identitas inti suatu kelas dan dapat digunakan untuk objek dari tipe data yang sama. Antarmuka, di sisi lain, digunakan untuk menentukan kemampuan periferal suatu kelas.
  9. Kaku vs Lentur - Kelas abstrak lebih fleksibel dalam hal fungsionalitas, setidaknya dari perspektif pengembang, sementara antarmuka lebih kaku.

Kelas Abstrak vs. Antarmuka: Bentuk tabel

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.

Ringkasan

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.