Semuanya baik dan bagus bila Anda memiliki kontrol penuh atas semua kode yang dipermasalahkan dan dapat menerapkannya di awal. Sekarang bayangkan Anda memiliki kelas publik yang digunakan di banyak tempat dengan sebuah metode
public class MyClass{
private String name;
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Sekarang Anda perlu meneruskannya ke WizzBangProcessor yang membutuhkan kelas untuk mengimplementasikan WBPInterface ... yang juga memiliki metode getName (), tetapi alih-alih implementasi konkret Anda, antarmuka ini mengharapkan metode untuk mengembalikan nama tipe Pengolahan Wizz Bang.
Dalam C # itu akan menjadi sepele
public class MyClass : WBPInterface{
private String name;
String WBPInterface.getName(){
return "MyWizzBangProcessor";
}
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Di Java Tough, Anda harus mengidentifikasi setiap titik dalam basis kode yang telah diterapkan di mana Anda perlu mengonversi dari satu antarmuka ke antarmuka lainnya. Tentu perusahaan WizzBangProcessor seharusnya menggunakan getWizzBangProcessName (), tetapi mereka juga pengembang. Dalam konteks mereka getName baik-baik saja. Sebenarnya, di luar Java, sebagian besar bahasa berbasis OO lainnya mendukung ini. Java jarang memaksa semua antarmuka untuk diimplementasikan dengan metode yang sama NAME.
Kebanyakan bahasa lain memiliki kompilator yang dengan senang hati menerima instruksi untuk mengatakan "metode ini di kelas ini yang cocok dengan tanda tangan metode ini dalam antarmuka yang diimplementasikan ini adalah implementasinya". Bagaimanapun, inti dari mendefinisikan antarmuka adalah untuk memungkinkan definisi disarikan dari implementasi. (Jangan biarkan saya mulai memiliki metode default di Interfaces di Java, apalagi default overriding .... karena tentu saja, setiap komponen yang dirancang untuk mobil jalan raya harus dapat menabrak mobil terbang dan bekerja - hei keduanya adalah mobil ... Saya yakin fungsi default katakanlah sat nav Anda tidak akan terpengaruh dengan input pitch and roll default, karena mobil hanya menguap!