JavaRush /Java Blog /Random-ID /metode dan kelas Java terakhir
articles
Level 15

metode dan kelas Java terakhir

Dipublikasikan di grup Random-ID
Dengan menyatakan metode kelas dengan pengubah final, yang kami maksudkan adalah tidak ada kelas turunan yang mampu mengganti metode ini dengan mengubah implementasi internalnya. Dengan kata lain, kita berbicara tentang versi final dari metode ini. Kelas secara keseluruhan juga dapat ditandai sebagai final. metode dan kelas Java terakhir - 1
final class NoExtending {
// …
}
Sebuah kelas yang ditandai sebagai finaltidak dapat diwariskan dan semua metodenya secara tidak langsung memperoleh properti tersebut final. Menggunakan fitur a finaldalam deklarasi kelas dan metode dapat meningkatkan tingkat keamanan kode. Jika suatu kelas dilengkapi dengan pengubah final, tidak ada yang dapat memperluas kelas tersebut dan mungkin memutus kontraknya dalam prosesnya. Jika sebuah tanda finalmenunjukkan suatu metode, Anda dapat sepenuhnya mempercayai implementasi internalnya dalam segala situasi tanpa takut akan "pemalsuan". Sangat tepat untuk digunakan final, misalnya, dalam deklarasi suatu metode yang memerlukan verifikasi kata sandi yang dimasukkan oleh pengguna untuk memastikan eksekusi yang tepat sesuai dengan tujuan awal metode tersebut. Kemungkinan penyerang tidak akan dapat mengubah implementasi asli dari metode tersebut dengan "menyelipkan" versi yang telah diganti ke dalam program, yang, misalnya, selalu mengembalikan nilai true, yang menunjukkan keberhasilan pendaftaran pengguna, apa pun kata sandinya. dia benar-benar masuk. Anda mempunyai hak, jika situasi spesifik memungkinkan, untuk melangkah lebih jauh dan mendeklarasikan finalseluruh kelas sebagai sebuah kelas; metode tersebut ValidatePasswordakan memperoleh properti yang sama secara tidak langsung. Penggunaan pengubah finaldalam deklarasi metode atau kelas memberikan batasan serius pada kemungkinan penggunaan dan pengembangan kode lebih lanjut. Penggunaan finalmetode dalam deklarasi merupakan indikator pasti bahwa implementasi metode bersifat mandiri dan lengkap. Pemrogram lain yang ingin menggunakan kelas Anda, memperluas fungsinya agar sesuai dengan kebutuhan mereka, akan dibatasi dalam pilihan cara untuk mencapai tujuan mereka atau sama sekali kehilangan cara tersebut. Dengan menandai finalsuatu kelas secara keseluruhan, Anda akan menonaktifkan kemampuannya untuk diwariskan dan kemungkinan besar akan mengurangi kegunaannya secara signifikan bagi orang lain. Saat Anda akan menggunakan pengubah final, pastikan apakah ANDA siap untuk pengorbanan tersebut dan apakah pengorbanan tersebut layak dilakukan. Dalam banyak kasus, untuk mencapai tingkat keamanan kode yang memadai, tidak perlu menetapkan seluruh kelas sebagai final- sangat mungkin untuk mempertahankan ekstensibilitas kelas dengan finalhanya menandai elemen struktural "kritis" dengan pengubah. Dalam hal ini, Anda akan membiarkan fungsi utama kelas tetap utuh dan pada saat yang sama mengizinkan pewarisannya dengan penambahan anggota baru, tetapi tanpa mendefinisikan ulang anggota "lama". Tentu saja, bidang yang diakses oleh kode metode finalpada gilirannya harus ditetapkan sebagai finalsalah satu private, karena jika tidak, kelas turunan mana pun akan dapat mengubah kontennya, sehingga memengaruhi perilaku metode terkait. Efek lain dari penggunaan pengubah finalterkait dengan penyederhanaan masalah optimasi kode yang diselesaikan oleh kompiler. Inilah yang terjadi bila suatu metode yang tidak ditandai sebagai dipanggilfinal, sistem runtime menentukan kelas objek yang sebenarnya, mengaitkan panggilan dengan kode yang paling sesuai dari grup metode yang kelebihan beban, dan mentransfer kontrol ke kode tersebut. Namun jika, misalnya, metode getNamedalam contoh kelas Attryang dibahas sebelumnya ditetapkan sebagai final, pengoperasian pemanggilannya mungkin akan disederhanakan. Dalam kasus yang paling sepele, seperti yang menyangkut getName, kompiler dapat dengan mudah mengganti pemanggilan metode dengan kode tubuhnya. Mekanisme ini disebut penyebarisan kode. Saat menggunakan metode versi inline, getNamedua ekspresi berikut dieksekusi persis sama:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Meskipun ekspresi di atas setara, ekspresi kedua masih memiliki keunggulan, karena metode ini getNamememungkinkan Anda memberikan properti read-only pada bidang nama, dan kode kelas memiliki tingkat abstraksi tertentu, yang memungkinkan Anda untuk lebih bebas mengubah implementasi kelas. Skema pengoptimalan yang sama dapat diterapkan oleh kompiler pada metode privatedan statiс, karena metode tersebut juga tidak mengizinkan penggantian. Menggunakan pengubah finaldalam deklarasi kelas juga membuat beberapa operasi pengecekan tipe menjadi lebih efisien. Dalam hal ini, banyak operasi serupa yang sudah dapat dilakukan pada tahap kompilasi dan oleh karena itu potensi kesalahan terdeteksi jauh lebih awal. Jika kompiler menemukan referensi ke suatu kelas dalam teks sumber final, dapat "pasti" bahwa objek yang bersangkutan adalah tipe yang ditentukan. Kompiler dapat segera menentukan tempat yang ditempati oleh suatu kelas dalam hierarki kelas secara keseluruhan dan memeriksa apakah kelas tersebut digunakan dengan benar atau tidak. Jika pengubah finaltidak diterapkan, pemeriksaan terkait hanya dilakukan pada tahap eksekusi program. Latihan 3.4. Apakah disarankan untuk memasukkan pengubah akhir dalam deklarasi metode (dan jika demikian, yang mana) dari kelas vehicle dan penumpangvehicle ? Tautan ke sumber asli: http://src-code.net/metody-i-klassy-final-java
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION