Perbedaan Utama: Antarmuka atau protokol adalah cara umum yang memungkinkan objek yang tidak terkait untuk berkomunikasi satu sama lain. Ini mewakili perilaku yang disepakati yang memfasilitasi interaksi antara dua objek. Kelas abstrak adalah kelas objek yang tidak bisa dipakai atau membuat instance objek. Kelas ini mungkin tidak memiliki implementasi atau dapat memiliki implementasi yang tidak lengkap.
Java adalah bahasa pemrograman, yang telah dipengaruhi oleh bahasa C. Ini banyak mengambil sintaksnya dari C dan C ++, namun memiliki lebih sedikit fasilitas tingkat rendah daripada keduanya. Java adalah bahasa pemrograman untuk tujuan umum yang dirancang untuk memiliki lebih sedikit ketergantungan implementasi dibandingkan dengan bahasa sebelumnya. Ini adalah bahasa bersamaan, berbasis kelas, dan berorientasi objek.
Java dikembangkan oleh James Gosling di Sun Microsystems dan dirilis pada 1995. Awalnya dirilis sebagai komponen inti platform Java Sun Microsystems. Sun sejak itu telah melisensikan ulang sebagian besar teknologi Java di bawah GNU General Public License. Ini berarti bahwa semua teknologi yang dilisensikan di bawah GNU General Public License adalah open source dan umumnya tersedia tanpa biaya. Sun Microsystems akhirnya bergabung ke Oracle Corporation. Pada 2012, Java telah menjadi salah satu bahasa pemrograman paling populer untuk digunakan. Ini terutama berlaku untuk aplikasi web client-server. Banyak sistem lain telah mengembangkan implementasi alternatif teknologi Sun, seperti GNU Compiler untuk Java dan GNU Classpath.
Kelas abstrak adalah kelas objek yang tidak bisa dipakai atau membuat instance objek. Kelas ini mungkin tidak memiliki implementasi atau dapat memiliki implementasi yang tidak lengkap. Itu juga dapat memiliki metode atau properti abstrak yang dibagikan oleh semua sub-kelas. Dalam beberapa bahasa pemrograman, tipe abstrak tanpa implementasi dikenal sebagai antarmuka. Di Jawa, tipe abstrak dapat dibuat menggunakan kata kunci 'abstrak' dalam definisi kelas. Tujuan memiliki kelas abstrak untuk menempatkan semua metode yang tidak diimplementasikan dalam kelas abstrak dan menyerahkannya ke subclass untuk menentukan bagaimana menerapkan kelas-kelas ini. Jika suatu kelas memiliki metode abstrak tunggal, kelas tersebut harus dinyatakan sebagai kelas abstrak, walaupun seseorang tidak perlu memiliki setidaknya satu metode tunggal untuk mendeklarasikan abstrak kelas.
Malliktalksjava.in mencantumkan perbedaan utama antara antarmuka dan abstrak sebagai:
- Kelas abstrak memiliki konstruktor, tetapi antarmuka tidak.
- Kelas abstrak dapat memiliki implementasi untuk beberapa anggotanya (Metode), tetapi antarmuka tidak dapat memiliki implementasi untuk salah satu anggotanya.
- Kelas abstrak harus memiliki subclass lain yang tidak akan berguna.
- Antarmuka harus memiliki implementasi oleh kelas lain yang tidak akan berguna
- Hanya antarmuka yang dapat memperluas antarmuka lain, tetapi setiap kelas dapat memperluas kelas abstrak.
- Semua variabel dalam antarmuka bersifat final secara default
- Antarmuka menyediakan bentuk pewarisan berganda. Suatu kelas hanya dapat memperpanjang satu kelas lainnya.
- Antarmuka terbatas pada metode dan konstanta publik tanpa implementasi. Kelas abstrak dapat memiliki implementasi parsial, bagian yang dilindungi, metode statis, dll.
- Kelas A dapat mengimplementasikan beberapa antarmuka. Tetapi dalam kasus kelas abstrak, suatu kelas hanya dapat memperpanjang satu kelas abstrak.
- Antarmuka lambat karena memerlukan tipuan ekstra untuk menemukan metode yang sesuai di kelas yang sebenarnya. Kelas abstrak cepat.
- Pengubah aksesibilitas (Publik / Pribadi / internal) diizinkan untuk kelas abstrak. Antarmuka tidak memungkinkan pengubah aksesibilitas
- Kelas abstrak dapat berisi metode lengkap atau tidak lengkap. Antarmuka hanya dapat berisi tanda tangan dari suatu metode tetapi tidak ada tubuh. Dengan demikian kelas abstrak dapat mengimplementasikan metode tetapi antarmuka tidak dapat mengimplementasikan metode.
- Kelas abstrak dapat berisi bidang, konstruktor, atau destruktor dan mengimplementasikan properti. Antarmuka tidak dapat berisi bidang, konstruktor, atau destruktor dan hanya memiliki tanda tangan properti tetapi tidak ada implementasi.
- Berbagai pengubah akses seperti abstrak, dilindungi, internal, publik, virtual, dll. Berguna dalam Kelas abstrak tetapi tidak di antarmuka.
- Ruang lingkup abstrak hingga kelas turunan.
- Lingkup antarmuka hingga tingkat rantai pewarisannya.
Informasi untuk tabel ini adalah milik codeproject.com dan mindprod.com
Antarmuka | Kelas Abstrak | |
Warisan berganda | Sebuah kelas dapat mewarisi beberapa antarmuka. | Suatu kelas dapat mewarisi hanya satu kelas abstrak. |
Implementasi default | Antarmuka tidak dapat memberikan kode apa pun, hanya tanda tangan. | Kelas abstrak dapat memberikan kode lengkap, default, dan / atau hanya detail yang harus diganti. |
Akses Pengubah | Antarmuka tidak dapat memiliki pengubah akses untuk subs, fungsi, properti, dll semuanya dianggap publik. | Kelas abstrak dapat berisi pengubah akses untuk subs, fungsi, properti. |
Inti vs Periferal | Antarmuka digunakan untuk menentukan kemampuan periferal suatu kelas. Dengan kata lain baik Manusia dan Kendaraan dapat mewarisi dari antarmuka IMovable. | Kelas abstrak mendefinisikan identitas inti dari sebuah kelas dan di sana ia digunakan untuk objek-objek dengan tipe yang sama. |
Kehomogenan | Jika berbagai implementasi hanya membagikan tanda tangan metode maka lebih baik menggunakan Antarmuka. | Jika berbagai implementasi dari jenis yang sama dan menggunakan perilaku atau status umum maka kelas abstrak lebih baik untuk digunakan. |
Kecepatan | Membutuhkan lebih banyak waktu untuk menemukan metode aktual di kelas yang sesuai. | Cepat |
Menambahkan fungsionalitas | Jika kita menambahkan metode baru ke Antarmuka maka kita harus melacak semua implementasi antarmuka dan menentukan implementasi untuk metode baru. | Jika kita menambahkan metode baru ke kelas abstrak maka kita memiliki opsi untuk menyediakan implementasi default dan oleh karena itu semua kode yang ada dapat berfungsi dengan baik. |
Fields dan Konstanta | Tidak ada bidang yang dapat didefinisikan dalam antarmuka. | Kelas abstrak dapat memiliki bidang dan konstanta yang didefinisikan. |
Kesakitan | Deklarasi konstan dalam suatu antarmuka semuanya dianggap final statis publik. | Kode bersama dapat ditambahkan ke dalam kelas abstrak. |
Konstanta | Hanya konstanta akhir statis, dapat menggunakannya tanpa kualifikasi di kelas yang mengimplementasikan antarmuka. | Konstanta instance dan statis keduanya dimungkinkan. Kedua kode intialiser statis dan instance juga dimungkinkan untuk menghitung konstanta. |
Kenyamanan Pihak Ketiga | Implementasi antarmuka dapat ditambahkan ke kelas pihak ketiga yang ada. | Kelas pihak ketiga harus ditulis ulang untuk memperluas hanya dari kelas abstrak. |
is-a vs -able atau can-do | Antarmuka sering digunakan untuk menggambarkan kemampuan periferal suatu kelas, bukan identitas pusatnya, misalnya kelas Automobile mungkin mengimplementasikan antarmuka yang dapat didaur ulang, yang dapat berlaku untuk banyak objek yang sama sekali tidak terkait. | Kelas abstrak mendefinisikan identitas inti dari keturunannya. Antarmuka yang diterapkan menyebutkan hal-hal umum yang dapat dilakukan kelas, bukan hal-hal yang dilakukan kelas. Dalam konteks Java, pengguna biasanya harus mengimplementasikan antarmuka Runnable daripada memperluas Thread, karena mereka tidak benar-benar tertarik untuk menyediakan beberapa fungsionalitas Thread baru, mereka biasanya hanya ingin beberapa kode memiliki kemampuan berjalan secara mandiri. Mereka ingin membuat sesuatu yang dapat dijalankan di utas, bukan utas baru. Perdebatan serupa adalah-lawan vs memiliki-muncul ketika Anda memutuskan untuk mewarisi atau mendelegasikan. |
Plug-in | Pengguna dapat menulis modul pengganti baru untuk antarmuka yang tidak berisi satu batang kode yang sama dengan implementasi yang ada. Ketika pengguna mengimplementasikan antarmuka, mereka mulai dari awal tanpa implementasi standar apa pun. Pengguna harus mendapatkan alat dari kelas lain; tidak ada yang hadir dengan antarmuka selain beberapa konstanta. Ini memberikan kebebasan pengguna untuk menerapkan desain internal yang sangat berbeda. | Pengguna harus menggunakan kelas abstrak apa adanya untuk basis kode, dengan semua bawaannya, baik atau buruk. Penulis kelas abstrak telah memberlakukan struktur pada pengguna. |
Pemeliharaan | Jika kode klien berbicara hanya dalam hal antarmuka, Anda dapat dengan mudah mengubah implementasi konkret di belakangnya, menggunakan metode pabrik. | Jika kode klien berbicara hanya dalam hal kelas abstrak, Anda dapat dengan mudah mengubah implementasi konkret di belakangnya, menggunakan metode pabrik. |