Peribadi dan akhir?

S: Memandangkan bahawa:

  • private kaedah tidak boleh diganti oleh subkelas
  • final kaedah tidak boleh diganti oleh subkelas
  • final kaedah membolehkan kod lebih cepat apabila disusun dengan pengoptimuman aktif (javac -O)

Soalan saya adalah:

  1. Mengapa tidak menyatakan semua privatekaedah finaljuga?
  2. Adakah kebanyakan penyusun menganggap privatekaedah sebagai final?

J: Seperti yang anda nyatakan, subkelas mungkin tidak mengatasi privatekaedah mengikut reka bentuk. Selanjutnya, finalkata kunci memberitahu penyusun bahawa subkelas mungkin tidak mengatasi kaedah tanpa mengira tahap aksesnya. Oleh kerana privatesudah menunjukkan bahawa subkelas mungkin tidak mengganti kaedah, menyatakan privatekaedah menjadi finalberlebihan. Membuat perisytiharan tidak akan menimbulkan masalah, tetapi juga tidak akan mencapai apa-apa, kerana privates secara automatik dipertimbangkan final.

Nah, amalan menyatakan semua privatekaedah finalakan mempunyai kesan sampingan. Mana-mana pengaturcara Java pemula yang menemui kod anda akan meniru penggunaan anda private final, memikirkan bahawa privatemesti dinyatakan dengan cara itu. Oleh itu, anda akan dapat menilai siapa yang telah dan yang tidak berhubung dengan kod anda. Ini mungkin membuktikan latihan yang menarik.

Jadi, untuk menjawab soalan 1, tidak perlu menyatakan privateahli final.

Bagi soalan 2, penyusun yang mengoptimumkan dan JVM dapat memanfaatkan privatekaedah dan finalkaedah. Oleh kerana subkelas mungkin tidak mengatasi jenis tersebut, tidak perlu melakukan pengikatan dinamik pada waktu runtime. Subkelas tidak akan mengatasi kaedah tersebut, jadi waktu proses akan selalu mengetahui kaedah apa yang harus dipanggil tanpa mencari hierarki warisan. Semasa penyusunan, penyusun yang mengoptimumkan mungkin memilih untuk menyusun semua privatedan finalkaedah untuk meningkatkan prestasi.

Jadi, untuk menjawab soalan 2, ya, semua penyusun akan menganggap privatekaedah sebagai final. Penyusun tidak akan membenarkan privatekaedah apa pun diganti. Begitu juga, semua penyusun akan menghalang subkelas daripada finalkaedah yang berlebihan .

Soalan yang lebih menarik: Adakah semua penyusun akan mengoptimumkan finals dan privates supaya mereka sebaris? Jawapan ringkasnya adalah tidak. Tingkah laku pengoptimuman akan bergantung pada penyusun dan tetapannya.

Catatan: Perbincangan final kami hanya berlaku untuk kaedah. Pemboleh ubah anggota akhir persendirian diperlakukan secara berbeza

Ketahui lebih lanjut mengenai topik ini

  • Mahu lebih? Lihat Indeks Soal Jawab Java untuk katalog Q&A lengkap

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

Kisah ini, "Peribadi dan akhir?" pada asalnya diterbitkan oleh JavaWorld.