(1) Kelas abstrak dan antarmuka dapat memiliki metode abstrak.
(2) Antarmuka hanya dapat memiliki konstanta, bukan variabel, sedangkan kelas abstrak dapat memiliki konstanta dan variabel.
(3) Kelas abstrak juga dapat memiliki metode non-abstrak, namun antarmuka tidak bisa.
Saat merancang sebuah program, Anda harus menentukan apakah akan menggunakan kelas abstrak atau antarmuka berdasarkan analisis spesifik. Selain menyediakan metode abstrak penting yang perlu ditimpa oleh subkelas, kelas abstrak juga menyediakan variabel dan metode non-abstrak yang dapat diwarisi oleh subkelas.
Jika masalah tertentu perlu diselesaikan dengan lebih baik menggunakan pewarisan, misalnya: selain mengganti metode abstrak kelas induk, subkelas juga perlu mewarisi beberapa variabel atau mewarisi beberapa metode non-abstrak penting dari kelas induk, Anda bisa pertimbangkan untuk menggunakan jenis abstrak. Jika masalah tertentu tidak memerlukan pewarisan, tetapi hanya memerlukan beberapa kelas untuk memberikan rincian implementasi beberapa metode abstrak penting, Anda dapat mempertimbangkan untuk menggunakan antarmuka.
Catatan : Antarmuka JDK1.8 mendukung metode statis dan metode default.
1) Antarmuka tidak dapat digunakan untuk membuat instance objek.
2) Antarmuka tidak memiliki metode konstruktor.
3) Semua metode di antarmuka harus berupa metode abstrak.
4) Antarmuka tidak boleh berisi variabel anggota, kecuali variabel statis dan final.
5) Antarmuka tidak diwarisi oleh kelas, tetapi diimplementasikan oleh kelas.
6) Antarmuka mendukung pewarisan berganda.
Metode default berarti antarmuka dapat memiliki metode implementasi dan tidak memerlukan kelas implementasi untuk mengimplementasikan metodenya. Anda hanya perlu menambahkan kata kunci default di depan nama metode untuk mengimplementasikan metode default. Metode default menyediakan cara untuk memperluas antarmuka tanpa merusak kode yang ada.
(1) Sebuah antarmuka dapat memiliki beberapa metode default dan metode statis.
(2) Metode default dipanggil melalui instance, dan metode statis dipanggil melalui nama antarmuka.
(3) Kata kunci default hanya dapat digunakan di antarmuka.
(4) Metode default dapat diwarisi. Jika Anda mewarisi beberapa antarmuka dan beberapa antarmuka mendefinisikan beberapa metode default yang sama, kelas implementasi perlu mengganti metode default, jika tidak, kesalahan akan dilaporkan.
(5) Metode statis tidak dapat diwariskan dan ditimpa, sehingga hanya dapat dipanggil melalui antarmuka tertentu.
Catatan : Setelah JDK 1.9, metode diperbolehkan untuk didefinisikan sebagai pribadi, sehingga kode tertentu yang digunakan kembali tidak akan mengekspos metode tersebut.