Pertanyaan Apa jenis metode override yang disebut di Java?


Saya relatif baru di Jawa dan saya menggunakan API baru. Saya menemukan metode ini dan saya tidak yakin apa ini disebut:

public void exampleMethod() {
    Button loginButton = new Button("login"){
       public void onSubmit(){
          //submit code here
       }
    };
}

Dari apa yang saya pahami, ini mengesampingkan metode onSubmit dari kelas Button. Saya tidak pernah menemukan jenis override seperti ini sebelumnya. Apakah ada nama khusus untuk itu? Saya ingin membaca lebih banyak tentang itu tetapi saya tidak dapat menemukannya. Semua pencarian saya sejauh ini menghasilkan metode reguler overriding dengan membuat kelas baru, yang sudah saya kenal.

Saya akan menghargai jika seseorang bisa mengarahkan saya ke arah yang benar.

Terima kasih.


32
2017-10-09 07:49


asal


Jawaban:


Itu sebuah kelas dalam anonim.

Dalam contoh di atas daripada membuat private class yang meluas Button kami membuat subkelas Tombol dan menyediakan implementasi metode yang ditimpa sejalan dengan sisa kode lainnya.

Karena kelas baru ini dibuat dengan cepat, maka ia tidak memiliki nama anonim. Seperti yang didefinisikan di dalam kelas lain itu anonim batin kelas.

Ini bisa menjadi jalan pintas yang sangat berguna, terutama untuk Listener kelas, tetapi dapat membuat kode Anda sulit diikuti jika Anda terbawa dan definisi metode selingan terlalu panjang.


28
2017-10-09 07:51



Itu sebuah kelas dalam anonim. Pada dasarnya ini menciptakan kelas baru yang berasal dari yang ditentukan (Button dalam hal ini, meskipun Anda dapat menggunakan teknik yang sama untuk mengimplementasikan antarmuka) dan menimpa metode yang sesuai. Itu juga bisa berisi metode lain, tetapi hanya tersedia di kelas itu.

Kelas memiliki akses ke variabel lokal final dalam metode yang sama, dan jika Anda menulis metode instan, referensi tersiratnya this juga (sehingga Anda dapat memanggil metode lain di kelas "utama" Anda).


12
2017-10-09 07:51



Itu adalah kelas dalam anonim.

Info lebih lanjut: Kelas anonim


7
2017-10-09 07:51