Metode default antarmuka java8
Apa metode default dan mengapa ada metode default?
Sederhananya, antarmuka dapat memiliki metode implementasi, dan tidak perlu mengimplementasikan kelas untuk mengimplementasikan metodenya. Cukup tambahkan kata kunci default sebelum nama metode.
Mengapa Anda membutuhkan fitur ini? Pertama-tama, antarmuka sebelumnya adalah pedang bermata dua. Keuntungannya adalah ditujukan untuk abstrak daripada pemrograman konkret. Kerugiannya adalah bahwa ketika diperlukan untuk memodifikasi antarmuka, perlu untuk memodifikasi semua kelas yang mengimplementasikan antarmuka. Kerangka kerja koleksi saat ini sebelum Java 8 tidak memiliki metode foreach. Solusi yang dapat dipikirkan adalah menambahkan metode dan implementasi baru ke antarmuka terkait di JDK. Namun, untuk versi yang diterbitkan, tidak mungkin untuk menambahkan metode baru ke antarmuka tanpa mempengaruhi implementasi yang ada. Jadi metode default diperkenalkan. Tujuan mereka adalah untuk membuat antarmuka tidak diperkenalkan tidak sesuai dengan implementasi yang ada.
Seperti yang ditunjukkan di bawah,
Public Interface Animal {default void eat () {System.out.println ("Metode Default Animal Eat"); }} Antarmuka dinyatakan, dan hanya ada satu metode default di dalamnya. Kemudian tulis kelas tertentu untuk mengimplementasikan antarmuka ini.
Dog kelas publik mengimplementasikan hewan {public void sayhi () {System.out.println ("dog"); } public static void main (string args []) {dog dog = new dog (); dog.eat (); }}Dalam kelas tertentu, tidak perlu mengesampingkan metode default, tetapi metode abstrak harus diimplementasikan.
Beberapa warisan metode default
Kode yang ditunjukkan di bawah ini,
antarmuka publik {void dosomething (); default void hello () {System.out.println ("Hello World From Interface A"); } default void foo () {System.out.println ("foo dari antarmuka a"); }} antarmuka B memperluas A {default void hello () {System.out.println ("Hello World from Interface B"); A.super.hello (); this.foo (); A.super.foo (); }} kelas C mengimplementasikan B, A {@Override public void dosomething () {System.out.println ("C Objek perlu melakukan sesuatu"); } public static void main (string args []) {a obj = new c (); obj.hello (); // Call Metode B Obj.Dosomething (); }}Hasil Cetak:
halo dunia dari antarmuka bhello world dari antarmuka afoo dari antarmuka afoo dari antarmuka objek AC perlu melakukan sesuatu
obj.hello () memanggil metode default dalam antarmuka B. Pada saat yang sama, metode default dalam antarmuka B memanggil metode default dalam antarmuka induk.
Mari kita lihat contoh lain dan pikirkan metode default dengan nama yang sama di beberapa warisan, seperti yang ditunjukkan di bawah ini.
antarmuka publik d {default void hello () {System.out.println ("Hello World From D"); }} antarmuka e {default void hello () {System.out.println ("Hello World from e"); }} kelas F mengimplementasikan d, e {@Override public void hello () {System.out.println ("Hello World F Class"); D.Super.Hello (); E.super.hello (); } public static void main (string args []) {f f = new f (); f.hello (); }} Kita perlu merumuskan metode default antarmuka mana yang akan dipanggil sebagai berikut:
D.Super.Hello (); E.super.hello ();
Contoh lain dari metode default Java8 :
Java8 telah menambahkan metode default untuk antarmuka, yang berarti bahwa dapat diimplementasikan di antarmuka. Metode implementasi ini adalah implementasi default, dan Anda juga dapat menulis ulang metode default ini di kelas implementasi antarmuka.
Contoh berikut:
Public Class AppInterFacedEfaultMethod {Public Static Interface DefaultMethodDemo {// Tentukan metode default, dengan kata kunci default yang didahului dengan metode default, diikuti dengan deklarasi metode dan metode void body void (input string) {System.out.println (input); } void dosomething (); } Public Static Class DemoClass mengimplementasikan defaultMethodDemo {@Override public void dosomething () {System.out.println ("Do Something"); }} kelas statis public DemoclassOverridedemo mengimplementasikan defaultMethodDemo {// menulis ulang metode default @Override public void demo (input string) {System.out.println ("Demo" + Input + "dengan override Method"); } @Override public void dosomething () {System.out.println ("Do Something"); }} public static void main (string [] args) {defaultMethodDemo demo = new democlass (); demo.demo ("ABC"); DefaultMethodDemo DemooverRide = DemoclassOverDeMo baru (); demooverride.demo ("ABC"); }}Di atas adalah pengantar terperinci untuk metode default antarmuka Java8, dan saya harap ini akan membantu untuk pembelajaran semua orang.