Seperti disebutkan dalam jawaban lain, kemampuan untuk menambahkan implementasi ke antarmuka ditambahkan untuk memberikan kompatibilitas mundur dalam kerangka kerja Koleksi. Saya berpendapat bahwa memberikan kompatibilitas ke belakang berpotensi satu-satunya alasan yang baik untuk menambahkan implementasi ke antarmuka.
Jika tidak, jika Anda menambahkan implementasi ke antarmuka, Anda melanggar hukum dasar mengapa antarmuka ditambahkan di tempat pertama. Java adalah bahasa pewarisan tunggal, tidak seperti C ++ yang memungkinkan untuk pewarisan berganda. Antarmuka memberikan manfaat pengetikan yang datang dengan bahasa yang mendukung multiple inheritance tanpa memperkenalkan masalah yang datang dengan multiple inheritance.
Lebih khusus lagi, Java hanya memungkinkan pewarisan tunggal dari suatu implementasi, tetapi memang memungkinkan banyak pewarisan antarmuka. Misalnya, berikut ini adalah kode Java yang valid:
class MyObject extends String implements Runnable, Comparable { ... }
MyObject
hanya mewarisi satu implementasi, tetapi mewarisi tiga kontrak.
Java meneruskan beberapa warisan implementasi karena beberapa warisan implementasi disertai dengan sejumlah masalah pelik, yang berada di luar cakupan jawaban ini. Antarmuka ditambahkan untuk memungkinkan multiple inheritance of contract (alias antarmuka) tanpa masalah multiple inheritance of implementation.
Untuk mendukung pendapat saya, berikut adalah kutipan dari Ken Arnold dan James Gosling dari buku The Java Programming Language, edisi ke-4 :
Warisan tunggal menghalangi beberapa desain yang berguna dan benar. Masalah multiple inheritance muncul dari multiple inheritance implementasi, tetapi dalam banyak kasus multiple inheritance digunakan untuk mewarisi sejumlah kontrak abstrak dan mungkin satu implementasi konkret. Menyediakan sarana untuk mewarisi kontrak abstrak tanpa mewarisi implementasi memungkinkan manfaat pengetikan multiple inheritance tanpa masalah banyak warisan implementasi. Warisan kontrak abstrak disebut
pewarisan antarmuka . Bahasa pemrograman Java mendukung pewarisan antarmuka dengan memungkinkan Anda mendeklarasikan suatu interface
tipe