Kelas yang berisi pengubah abstrak adalah kelas abstrak, dan kelas abstrak tidak dapat membuat objek instan. Kelas yang berisi metode abstrak harus didefinisikan sebagai kelas abstrak, dan metode dalam kelas kelas abstrak tidak harus abstrak. Metode abstrak yang didefinisikan dalam kelas abstrak harus diimplementasikan dalam subkelas konkret, sehingga tidak boleh ada konstruktor abstrak atau metode statis abstrak. Jika subkelas tidak mengimplementasikan semua metode abstrak di kelas induk abstrak, maka subkelas tersebut juga harus didefinisikan sebagai tipe abstrak.
Sebuah antarmuka dapat dikatakan sebagai kasus khusus dari kelas abstrak, dan semua metode dalam antarmuka harus abstrak. Definisi metode di antarmuka default ke tipe abstrak publik, dan variabel anggota tipe di antarmuka default ke final statis publik.
Mari kita bandingkan perbedaan tata bahasa antara keduanya :
1. Kelas abstrak dapat memiliki konstruktor, tetapi antarmuka tidak dapat memiliki konstruktor.
2. Mungkin terdapat variabel anggota biasa di kelas abstrak, tetapi tidak ada variabel anggota biasa di antarmuka.
3. Kelas abstrak dapat berisi metode biasa non-abstrak. Semua metode di antarmuka harus abstrak, dan tidak boleh ada metode biasa non-abstrak.
4. Tipe akses metode abstrak di kelas abstrak dapat bersifat publik, dilindungi, dan (tipe default
Tidak ada kesalahan yang dilaporkan di bawah gerhana, tetapi seharusnya tidak berfungsi), tetapi metode abstrak di antarmuka hanya dapat bertipe publik, dan defaultnya adalah tipe abstrak publik.
5. Kelas abstrak dapat berisi metode statis, tetapi antarmuka tidak boleh berisi metode statis.
6. Kelas abstrak dan antarmuka dapat berisi variabel anggota statis. Tipe akses variabel anggota statis di kelas abstrak dapat berubah-ubah, tetapi variabel yang ditentukan dalam antarmuka hanya dapat bertipe final statis publik, dan defaultnya adalah tipe final statis publik.
7. Sebuah kelas dapat mengimplementasikan banyak antarmuka, tetapi hanya dapat mewarisi satu kelas abstrak.
Mari kita bahas perbedaan keduanya dalam penerapan :
Antarmuka lebih berperan dalam metode desain arsitektur sistem dan terutama digunakan untuk menentukan kontrak komunikasi antar modul. Kelas abstrak berperan dalam implementasi kode dan dapat mewujudkan penggunaan kembali kode. Misalnya, pola desain metode templat adalah aplikasi khas kelas abstrak. Diasumsikan bahwa semua kelas Servlet dalam suatu proyek harus menggunakan metode yang sama untuk menentukan izin dan catatan akses. Catat dan tangani pengecualian, lalu Anda dapat menentukan kelas dasar abstrak sehingga semua Servlet mewarisi kelas dasar abstrak ini, dalam metode layanan kelas dasar abstrak, penilaian izin, pencatatan log akses, dan kode penanganan pengecualian cukup lengkapi kode logika bisnisnya masing-masing. Kode semunya adalah sebagai berikut: