Ohjelmointi

Yksityinen ja lopullinen?

K: Olettaen että:

  • yksityinen menetelmiä ei voida ohittaa alaluokilla
  • lopullinen menetelmiä ei voida ohittaa alaluokilla
  • lopullinen menetelmät mahdollistavat nopeamman koodin käännettäessä optimoinnilla (javac -O)

Kysymykseni ovat:

  1. Miksi ei ilmoittaisi kaikkia yksityinen menetelmiä lopullinen yhtä hyvin?
  2. Hoitavatko useimmat kääntäjät yksityinen menetelmät kuten lopullinen?

A: Kuten huomautat, alaluokat eivät välttämättä ohita yksityinen suunnitellut menetelmät. Lisäksi lopullinen avainsana kertoo kääntäjälle, että alaluokat eivät saa ohittaa menetelmää sen käyttöoikeustasosta riippumatta. Siitä asti kun yksityinen viittaa jo siihen, että alaluokka ei voi ohittaa menetelmää, julistamalla a yksityinen menetelmä olla lopullinen on tarpeeton. Ilmoituksen tekeminen ei aiheuta ongelmia, mutta siitä ei myöskään saavuteta mitään yksityinens otetaan automaattisesti huomioon lopullinen.

No, käytäntö julistaa kaikki yksityinen menetelmiä lopullinen on yksi sivuvaikutus. Kaikki aloittelevat Java-ohjelmoijat, jotka kohtaavat koodisi, rinnastavat käyttöösi yksityinen finaaliajattelemalla sitä yksityinens on ilmoitettava tällä tavalla. Joten voit arvioida, kenellä on ja kuka ei ole ollut yhteydessä koodisi kanssa. Se voi osoittautua mielenkiintoiseksi harjoitukseksi.

Joten vastaamaan kysymykseen 1 ei tarvitse julistaa yksityinen jäsenet lopullinen.

Kysymyksestä 2 optimoiva kääntäjä ja JVM voivat hyödyntää yksityinen menetelmät ja lopullinen menetelmiä. Koska alaluokat eivät välttämättä korvaa näitä tyyppejä, dynaamista sidontaa ei tarvitse suorittaa ajon aikana. Alaluokat eivät koskaan ohita menetelmää, joten ajonaikainen tieto aina tietää mitä menetelmää kutsutaan hakematta perintöhierarkiaa. Käännöksen aikana optimoiva kääntäjä voi jopa päättää sisällyttää kaikki yksityinen ja lopullinen menetelmiä suorituskyvyn parantamiseksi.

Joten, vastaamaan kysymykseen 2, kyllä, kaikki kääntäjät käsittelevät yksityinen menetelmät kuten lopullinen. Kääntäjä ei salli mitään yksityinen menetelmä ohitetaan. Samoin kaikki kääntäjät estävät alaluokkien ohittamisen lopullinen menetelmiä.

Mielenkiintoisempi kysymys: Optimoivatko kaikki kääntäjät lopullinens ja yksityinens niin, että ne ovat linjassa? Lyhyt vastaus on ei. Optimointikäyttäytyminen riippuu kääntäjästä ja sen asetuksista.

merkintä: Yksityisen finaalin keskustelu koskee vain menetelmiä. Yksityisiä lopullisen jäsenen muuttujia kohdellaan eri tavalla

Lisätietoja tästä aiheesta

  • Haluta lisää? Katso Java-kysymykset ja vastaukset Hakemisto koko Q & A-luetteloon

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

Tämä tarina "Yksityinen ja lopullinen?" julkaisi alun perin JavaWorld.