Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara Antarmuka dan Kelas Abstrak di Java & C #

Antarmuka dan kelas Abstrak keduanya berkontribusi pada "tipe tidak lengkap" di OOP. Kadang-kadang kita membutuhkan superclass untuk mendefinisikan "apa yang harus dilakukan" tetapi, bukan "bagaimana melakukan", itu bagaimana melakukan bagian akan diimplementasikan oleh kelas turunan sesuai dengan kebutuhannya, " antarmuka " memberikan solusi untuk ini. Terkadang kita membutuhkan kelas superclass yang mendefinisikan beberapa struktur umum yang dapat diimplementasikan oleh kelas turunan dan beberapa struktur tertentu yang dapat digunakan oleh kelas turunan, " kelas abstrak " memberikan solusi untuk ini. Perbedaan mendasar antara antarmuka dan kelas abstrak adalah antarmuka sepenuhnya tidak lengkap, dan kelas abstrak sebagian tidak lengkap.

Grafik perbandingan

Dasar untuk PerbandinganAntarmukaKelas Abstrak
DasarKetika Anda hanya memiliki pengetahuan tentang persyaratan bukan tentang penerapannya, Anda menggunakan "Antarmuka".Ketika Anda sebagian tahu tentang implementasi Anda menggunakan "kelas abstrak".
MetodeAntarmuka hanya berisi metode abstrak.Kelas abstrak berisi metode abstrak serta metode konkret.
Pengubah Akses MetodeMetode antarmuka selalu "Publik" dan "Abstrak", bahkan jika kita tidak mendeklarasikannya. Oleh karena itu, dapat dikatakan sebagai 100%, kelas abstrak murni.Tidak wajib bahwa metode dalam kelas abstrak akan bersifat publik dan abstrak. Itu dapat memiliki metode konkret juga.
Pengubah Terbatas untuk MetodeMetode antarmuka tidak dapat dideklarasikan dengan pengubah berikut:
Publik: Pribadi dan Terlindungi
Abstrak: final, statis, disinkronkan, asli, strictfp.
Tidak ada batasan pada pengubah variabel kelas abstrak.
Akses Pengubah VariabelPengubah Acess diizinkan untuk variabel Antarmuka bersifat publik, statis & final baik kita mendeklarasikan atau tidak.Variabel dalam kelas abstrak tidak harus publik, statis, final.
Pengubah terbatas untuk VariabelVariabel antarmuka tidak dapat dideklarasikan sebagai pribadi, dilindungi, sementara, tidak stabil.Tidak ada batasan pada pengubah variabel kelas abstrak.
Inisialisasi variabelVariabel antarmuka harus diinisialisasi pada saat deklarasi.Tidak wajib bahwa variabel kelas abstrak harus diinisialisasi pada saat deklarasi.
Mesin virtual dan blok statisDi dalam antarmuka, Anda tidak dapat mendeklarasikan instance atau blok statis.Kelas abstrak memungkinkan instance atau blok statis di dalamnya.
KonstruktorAnda tidak dapat mendeklarasikan konstruktor di dalam antarmuka.Anda bisa mendeklarasikan konstruktor di dalam kelas abstrak.

Definisi Antarmuka

Java tidak mengizinkan banyak pewarisan. Yaitu, satu kelas tidak dapat mewarisi lebih dari satu kelas sekaligus. Alasan di balik ini dapat dijelaskan dengan sebuah contoh. Misalkan kita memiliki dua kelas induk, A dan B dan kelas turunan C. Kelas turunan C mewarisi kelas A dan B. Sekarang, keduanya memiliki kelas A dan B memiliki metode set (), maka itu akan menjadi pertanyaan untuk kelas C metode set () mana yang harus diwarisi. Solusi untuk masalah ini adalah "antarmuka".

Antarmuka adalah kelas abstrak murni. Kata kunci yang digunakan untuk membuat antarmuka adalah "antarmuka". Karena semua metode di dalam antarmuka sepenuhnya abstrak. Antarmuka hanya menentukan apa yang harus dilakukan oleh suatu kelas, tetapi tidak menentukan bagaimana melakukannya. Hanya karena semua metode yang dinyatakan di dalam antarmuka adalah abstrak, tidak ada instance yang dibuat untuk sebuah antarmuka. Bentuk umum dari "antarmuka" di java adalah:

 access_specifier interface interface_name {return-type method-name1 (daftar parameter); return-type method-name2 (daftar parameter); ketik final-varname1 = nilai; ketik final-varname2 = nilai; // ... return-type method-nameN (daftar parameter); ketik final-varnameN = nilai; } 

Specifier akses dinyatakan publik karena kelas perlu mengimplementasikan antarmuka.

Kami tidak memiliki konsep "Antarmuka" di C ++. Tapi, Java dan C # mendefinisikan antarmuka dengan sangat baik.

Antarmuka di Jawa:

  • Variabel suatu antarmuka secara default selalu publik, statis dan final.
  • Variabel harus diinisialisasi pada saat deklarasi.
  • Variabel tidak pernah dapat dinyatakan sebagai pribadi, dilindungi, sementara, dan mudah berubah.
  • Metode antarmuka selalu bersifat publik dan abstrak sedangkan, mereka tidak pernah dapat dinyatakan sebagai pribadi, dilindungi, final, statis, disinkronkan, asli, dan strictfp.
  • Anda tidak dapat mendeklarasikan konstruktor di dalam antarmuka karena tujuan utama konstruktor adalah inisialisasi variabel kelas tetapi, dalam variabel antarmuka diinisialisasi pada saat deklarasi.
  • Antarmuka dapat mewarisi antarmuka lain tetapi, kelas yang mengimplementasikan antarmuka tersebut harus menerapkan metode semua antarmuka yang diwariskan.
  • Kelas dapat mewarisi lebih dari satu antarmuka sekaligus, dan harus mengimplementasikan semua metode semua antarmuka yang diwariskan.

Bentuk umum penerapan antarmuka di Jawa:

 class class_name mengimplementasikan Interface_name {// class-body} 

Untuk mewarisi antarmuka, kelas menggunakan kata kunci "mengimplementasikan", dan kelas mengimplementasikan semua metode yang dinyatakan oleh antarmuka yang diwariskan.

Antarmuka dalam C #:

Antarmuka di C # hampir mirip dengan antarmuka di Jawa kecuali:

  • Antarmuka di C # tidak mendeklarasikan variabel.
  • Nama antarmuka diawali dengan huruf kapital I dan diwarisi dengan tanda titik dua (:).

Bentuk umum mengimplementasikan antarmuka dalam C #:

 class class_name: interface_name {// class-body} 

Definisi Kelas Abstrak

Kelas yang berisi satu atau lebih metode abstrak disebut kelas abstrak, dan kelas dinyatakan sebagai abstrak menggunakan kata kunci "abstrak", didahului dengan kata kunci "kelas" di awal deklarasi kelas. Karena kelas abstrak berisi metode abstrak, ini merupakan tipe yang tidak lengkap. Oleh karena itu, Anda tidak dapat membuat objek dari kelas abstrak. Setiap kali kelas mewarisi kelas abstrak, itu harus menerapkan semua metode abstrak dari kelas abstrak jika tidak maka harus juga dinyatakan sebagai abstrak. Atribut abstrak diwarisi hingga implementasi lengkap metode abstrak tercapai.

Kelas abstrak juga dapat berisi metode konkret yang dapat dimanfaatkan oleh kelas turunan apa adanya. Tapi, Anda tidak bisa mendeklarasikan konstruktor abstrak atau metode statis abstrak di dalam kelas abstrak. Bentuk umum dari kelas abstrak di Jawa adalah sebagai berikut:

 abstrak class class_name {abstract method_name1 (); abstrak method_name2 (); : return_type method_name3 (parameter_list) {// metode beton} return_type method_name4 (parameter_list) {// metode beton}}; 

Konsep kelas abstrak serupa dalam Java dan C #. Kelas abstrak sedikit berbeda dalam C ++.

Dalam C ++ jika suatu kelas setidaknya memiliki satu fungsi virtual, kelas tersebut menjadi kelas abstrak. Alih-alih kata kunci "abstrak", kata kunci "virtual" digunakan untuk mendeklarasikan metode abstrak.

Perbedaan Utama Antara Antarmuka dan Kelas Abstrak di Java & C #

  1. Ketika Anda memiliki pengetahuan tentang "apa yang diperlukan" tetapi tidak tentang "bagaimana itu akan diterapkan" maka antarmuka harus digunakan. Di sisi lain, jika Anda tahu apa yang diperlukan dan sebagian tahu bagaimana itu akan diimplementasikan maka gunakan kelas abstrak.
  2. Antarmuka memiliki semua metodenya abstrak tetapi, kelas abstrak memiliki beberapa metode abstrak dan beberapa metode konkret.
  3. Metode-metode di dalam antarmuka bersifat publik dan abstrak karenanya, ia juga disebut sebagai kelas abstrak murni. Di sisi lain, metode di dalam abstrak tidak terbatas hanya untuk publik dan abstrak.
  4. Metode antarmuka tidak pernah bisa bersifat pribadi, dilindungi, final, statis, disinkronkan, asli atau strictfp. Di sisi lain, tidak ada batasan untuk metode kelas abstrak.
  5. Variabel-variabel dalam suatu antarmuka bersifat publik dan final, terlepas apakah kita mendeklarasikannya atau tidak, sementara itu, tidak ada batasan seperti itu untuk variabel kelas abstrak menjadi publik dan final saja.
  6. Variabel dalam suatu antarmuka tidak pernah bisa bersifat transien atau privat yang dilindungi sementara, tidak ada batasan untuk variabel dalam kelas abstrak.
  7. Variabel antarmuka harus diinisialisasi selama deklarasi. Di sisi lain, variabel-variabel dalam kelas abstrak dapat diinisialisasi kapan saja.
  8. Di dalam sebuah antarmuka, sebuah instance atau blok statis tidak dapat dideklarasikan tetapi, Anda dapat mendeklarasikan instance atau blok statis di dalam kelas abstrak.
  9. Anda tidak dapat mendefinisikan konstruktor di dalam antarmuka sedangkan, Anda bisa mendefinisikan konstruktor di dalam kelas abstrak.

Kesimpulan:

Ketika Anda perlu membuat kelas dasar yang berisi bentuk umum dari metode yang dapat diimplementasikan oleh kelas turunan sesuai dengan kebutuhan mereka, konsep antarmuka dan kelas abstrak membantu melakukannya.

Top