Saya belajar melalui antarmuka ketika saya perhatikan bahwa Anda sekarang dapat menentukan metode statis dan default dalam sebuah antarmuka.
public interface interfacesample2 {
public static void method() {
System.out.println("hello world");
}
public default void menthod3() {
System.out.println("default print");
}
}
Mohon jelaskan perbedaan keduanya dan juga jika ada contoh kapan kita akan menggunakan ini akan menyenangkan. Sedikit bingung tentang Antarmuka.
default implementation
metode yang mungkin diganti.Jawaban:
Perbedaan antara metode statis dan default di Java 8:
1) Metode default dapat diganti dalam kelas implementasi, sedangkan statis tidak bisa .
2) Metode statis hanya milik kelas Antarmuka, jadi Anda hanya dapat memanggil metode statis pada kelas Antarmuka, bukan pada kelas yang mengimplementasikan Antarmuka ini, lihat:
3) Baik kelas dan antarmuka dapat memiliki metode statis dengan nama yang sama, dan tidak ada yang menimpa yang lain!
sumber
purpose
( menggunakan implementasi umum ) dan menyelesaikan ambiguitas denganimplementing the logic again in subclass
( menimpa, menyembunyikan ). satu-satunya alasan yang masuk akal adalah karena alasan [metode antarmuka statis tidak diwariskan] ( stackoverflow.com/questions/25169175/… ) dan karenanya kami tidak dapat memanggilnya menggunakan instance subclass.Metode statis adalah metode yang berlaku untuk 'namespace' kelas, bisa dikatakan. Jadi
static
metodefoo
antarmukaInterface
diakses olehInterface.foo()
. Perhatikan bahwa panggilan fungsi tidak berlaku untuk contoh tertentu antarmuka tertentu.Implementasi default
bar
di sisi lain, dipanggil olehSebuah
static
metode antarmuka tidak dapat mengetahui tentangthis
variabel, tetapi implementasi default bisa.sumber
Metode antarmuka statis seperti metode kelas statis (di sini metode tersebut hanya dimiliki oleh Antarmuka). Dimana sebagai metode antarmuka default menyediakan metode
default implementation
antarmuka (yang menerapkan kelas mungkinoverride
)Tapi ingat jika kelas adalah
implementing more than one interface with same default
tanda tangan metode maka kelas pelaksananeeds to override the default method
Anda dapat menemukan contoh sederhana di bawah ini (dapat DIY untuk berbagai kasus)
Itu tergantung pada pernyataan masalah Anda. Saya akan mengatakan Metode default berguna, jika Anda memerlukan implementasi yang sama untuk metode dalam spesifikasi Anda di semua kelas dalam kontrak itu, Atau dapat digunakan seperti
Adapter
kelas.ini bacaan yang bagus: /software/233053/why-were-default-and-static-methods-added-to-interfaces-in-java-8-when-we-alread
juga di bawah oracle doc menjelaskan metode default & statis untuk mengembangkan antarmuka yang ada:
http://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html
sumber
Inilah pandangan saya:
metode statis dalam antarmuka:
Anda bisa memanggilnya secara langsung (InterfacetA.staticMethod ())
Sub-kelas tidak akan dapat mengganti.
Sub-kelas mungkin memiliki metode dengan nama yang sama dengan staticMethod
metode default di antarmuka:
Anda tidak bisa memanggilnya secara langsung.
Sub-kelas akan dapat menggantinya
Keuntungan:
Metode statis: Anda tidak perlu membuat kelas terpisah untuk metode utilitas.
Metode default: Menyediakan fungsionalitas umum dalam metode default.
sumber
Tautan ini memiliki beberapa wawasan yang berguna, beberapa di antaranya telah tercantum di sini.
metode default & statis telah menjembatani perbedaan antara antarmuka dan kelas abstrak .
Metode default antarmuka :
Antarmuka metode statis :
Suka mengutip referensi bermanfaat lainnya .
sumber
Metode default antarmuka:
Ini membantu dalam menghindari kelas utilitas, seperti semua metode kelas Koleksi dapat disediakan di antarmuka itu sendiri.
Ini membantu dalam memperluas antarmuka tanpa takut melanggar kelas implementasi.
Antarmuka metode statis:
Mereka adalah bagian dari antarmuka, kita tidak dapat menggunakannya untuk objek kelas implementasi.
Ini membantu dalam memberikan keamanan dengan tidak mengizinkan kelas implementasi untuk menimpanya.
Sekarang bagaimana metode statis memberikan keamanan. Mari kita lihat contohnya.
Sini
obj.newMethod();
mencetak logika implementasi kelas, berarti kita dapat mengubah logika metode itu di dalam kelas implementasi.Tapi
obj.anotherNewMethod();
logika implementasi kelas pencetakan, tetapi tidak mengubah implementasi antarmuka. Jadi jika ada logika dekripsi enkripsi yang tertulis di dalam metode itu, Anda tidak dapat mengubahnya.sumber
Menurut Oracle's Javadocs: http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
Biasanya, metode statis dalam antarmuka digunakan sebagai metode Helper sedangkan metode default digunakan sebagai implementasi default untuk kelas yang mengimplementasikan antarmuka itu.
Contoh:
sumber
Sesuai dengan dokumen JLS Java14 :
Metode Default:
Ini adalah metode instance yang dideklarasikan dalam antarmuka dengan pengubah default
Itu hanya dapat diakses oleh instance kelas pelaksana saja
Tubuhnya selalu diwakili oleh blok, yang menyediakan implementasi atau perilaku default untuk setiap kelas yang mengimplementasikan tanpa mengganti metode
Itu tidak pernah bisa statis atau pribadi
Metode Statis:
Itu bisa dipanggil oleh antarmuka tanpa referensi ke objek tertentu, seperti metode statis kelas
Metode statis bisa menjadi pribadi
Kelas pelaksana tidak dapat mengakses metode statis
Mari kita pahami dengan bantuan kode contoh di bawah ini:
sumber
kami tidak dapat mengeksekusi
Interfacesample2.menthod3();
karena ini bukan metode statis. Untuk mengeksekusimethod3()
kita membutuhkan sebuah instanceInterfacesample2
interface.Silakan temukan contoh praktis berikut:
sumber
Memulai antarmuka Java 8 juga dapat memiliki metode statis. Seperti metode statis suatu kelas, metode statis suatu antarmuka dapat dipanggil menggunakan nama Antarmuka.
Contoh
Perbedaan antara metode antarmuka statis dan default adalah metode default mendukung pewarisan tetapi metode statis tidak. Metode default dapat diganti dalam antarmuka pewaris.
Berikut adalah bacaan yang bagus tentang metode default antarmuka dan metode statis. Metode Default Antarmuka di Java 8
sumber
Semua jawaban bagus di sini. Saya ingin menambahkan penggunaan praktis lain dari fungsi statis di antarmuka. Tip datang dari buku - Java Efektif, Edisi ke-3 oleh Joshua Bloch di Bab2: Membuat dan Menghancurkan Objek.
Metode pabrik statis adalah metode yang mengembalikan suatu objek. Mereka bekerja seperti konstruktor. Dalam kasus tertentu, metode pabrik statis menyediakan kode yang lebih mudah dibaca daripada menggunakan konstruktor.
Mengutip dari buku - Effective Java, Edisi ke-3 oleh Joshua Bloch
Penulis memberikan contoh Koleksi di mana metode pabrik statis tersebut diterapkan. Memeriksa kodenya, Josh Bloch dapat dilihat sebagai penulis pertama kelas Koleksi. Meskipun Koleksi adalah kelas dan bukan antarmuka. Namun konsep tersebut tetap berlaku.
Lebih lanjut dia menjelaskan bahwa API tidak hanya lebih kecil, tetapi juga membantu keterbacaan kode dan kemudahan API ..
Berikut adalah salah satu metode statis dari kelas java.util.Collections:
sumber