Programiranje

Zasebno in končno?

V: Glede na to:

  • zasebno metod ni mogoče preglasiti s podrazredi
  • dokončno metod ni mogoče preglasiti s podrazredi
  • dokončno metode omogočajo hitrejšo kodo, kadar je prevedena z optimizacijami na (javac -O)

Moja vprašanja so:

  1. Zakaj ne bi prijavili vseh zasebno metode dokončno prav tako?
  2. Ali večina prevajalcev zdravi zasebno metode kot dokončno?

A: Kot poudarjate, podrazredi morda ne bodo razveljavili zasebno metode po zasnovi. Poleg tega dokončno ključna beseda sporoča prevajalniku, da podrazredi ne smejo preglasiti metode ne glede na njeno raven dostopa. Od zasebno že pomeni, da podrazred ne sme preglasiti metode, pri čemer razglasi a zasebno metoda biti dokončno je odveč. Izjava ne bo povzročala težav, vendar pa tudi ne bo ničesar dosegla zasebnos se samodejno upoštevajo dokončno.

No, praksa razglasitve vseh zasebno metode dokončno bo imel en stranski učinek. Vsak začetnik Java programer, ki naleti na vašo kodo, bo izenačil vašo uporabo zasebni finale, razmišljam o tem zasebnos je treba prijaviti na ta način. Tako boste lahko presodili, kdo in kdo ni bil v stiku z vašo kodo. Lahko se izkaže za zanimivo vajo.

Torej, da bi odgovorili na prvo vprašanje, ni treba razglasiti zasebno člani dokončno.

Kar zadeva vprašanje 2, lahko to optimizira prevajalnik in JVM zasebno metode in dokončno metode. Ker podrazredi teh vrst morda ne bodo preglasili, med izvajanjem ni treba izvajati dinamične vezave. Podrazredi metode nikoli ne bodo preglasili, zato bo izvajalno okolje vedno vedelo, katero metodo poklicati, ne da bi iskali hierarhijo dedovanja. Med prevajanjem se lahko optimizirajoči prevajalnik celo odloči, da vstavi vse zasebno in dokončno metode za izboljšanje učinkovitosti.

Torej, da odgovorim na vprašanje 2, da, vsi prevajalci bodo obravnavali zasebno metode kot dokončno. Prevajalnik ne bo dovolil nobenega zasebno metoda, ki jo je treba preglasiti. Prav tako bodo vsi prevajalniki preprečili preglasitev podrazredov dokončno metode.

Bolj zanimivo vprašanje: Ali bodo vsi prevajalniki optimizirali dokončnos in zasebnos, da so v vrstici? Kratek odgovor je ne. Obnašanje optimizacije bo odvisno od prevajalnika in njegovih nastavitev.

Opomba: Naša razprava o zasebnem finalu velja samo za metode. Zasebne spremenljivke končnih članov se obravnavajo različno

Preberite več o tej temi

  • Želijo več? Glej Vprašanja in odgovori o Javi Kazalo za celoten katalog Vprašanj

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

Ta zgodba "Zasebno in končno?" je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found