Di Java 8, antarmuka dapat berisi metode yang diimplementasikan, metode statis, dan apa yang disebut metode "default" (yang tidak perlu ditimpa oleh kelas implementasi).
Dalam pandangan saya (mungkin naif), tidak perlu melanggar antarmuka seperti ini. Antarmuka selalu menjadi kontrak yang harus Anda penuhi, dan ini adalah konsep yang sangat sederhana dan murni. Sekarang ini adalah campuran dari beberapa hal. Menurutku:
- metode statis bukan milik antarmuka. Mereka termasuk kelas utilitas.
- Metode "default" seharusnya tidak diizinkan di antarmuka sama sekali. Anda selalu dapat menggunakan kelas abstrak untuk tujuan ini.
Pendeknya:
Sebelum Java 8:
- Anda bisa menggunakan kelas abstrak dan reguler untuk menyediakan metode statis dan default. Peran antarmuka jelas.
- Semua metode dalam antarmuka harus diganti dengan menerapkan kelas.
- Anda tidak dapat menambahkan metode baru di antarmuka tanpa memodifikasi semua implementasi, tetapi ini sebenarnya adalah hal yang baik.
Setelah Java 8:
- Hampir tidak ada perbedaan antara antarmuka dan kelas abstrak (selain multiple inheritance). Bahkan Anda bisa meniru kelas reguler dengan antarmuka.
- Saat memprogram implementasi, pemrogram mungkin lupa untuk mengganti metode default.
- Ada kesalahan kompilasi jika kelas mencoba menerapkan dua atau lebih antarmuka yang memiliki metode default dengan tanda tangan yang sama.
- Dengan menambahkan metode default ke antarmuka, setiap kelas pelaksana secara otomatis mewarisi perilaku ini. Beberapa dari kelas-kelas ini mungkin belum dirancang dengan fungsionalitas baru itu dalam pikiran, dan ini dapat menyebabkan masalah. Misalnya, jika seseorang menambahkan metode default baru
default void foo()
ke antarmukaIx
, maka kelas yangCx
mengimplementasikanIx
dan memilikifoo
metode pribadi dengan tanda tangan yang sama tidak dapat dikompilasi.
Apa alasan utama untuk perubahan besar seperti itu, dan apa manfaat baru (jika ada) yang mereka tambahkan?
@Deprecated
kategori! metode statis adalah salah satu konstruksi paling disalahgunakan di Jawa, karena ketidaktahuan dan kemalasan. Banyak metode statis biasanya berarti programmer tidak kompeten, meningkatkan kopling dengan beberapa urutan besarnya dan merupakan mimpi buruk untuk unit test dan refactor ketika Anda menyadari mengapa mereka adalah ide yang buruk!