Privatno i konačno?

P: S obzirom na to da:

  • private metode se ne mogu nadjačati potklasama
  • final metode se ne mogu nadjačati potklasama
  • final metode omogućuju brži kod kada se kompajlira s optimizacijama na (javac -O)

Moja pitanja su:

  1. Zašto ne prijaviti i sve privatemetode final?
  2. Tretira li većina sastavljača privatemetode kao final?

O: Kao što ste istaknuli, potklase možda neće nadjačati privatemetode dizajniranim. Nadalje, finalključna riječ poručuje prevoditelju da potklase ne smiju nadjačati metodu bez obzira na njezinu razinu pristupa. Budući da privateveć podrazumijeva da potklasa možda neće nadjačati metodu, proglašavanje privatemetode finalsuvišnom. Davanje deklaracije neće stvarati probleme, ali neće ni postići ništa, jer se privates automatski uzimaju u obzir final.

Pa, praksa deklariranja svih privatemetoda finalimat će jednu nuspojavu. Bilo koji početnik Java programer koji naiđe na vaš kôd usvojit će vašu upotrebu private final, misleći da privates mora biti deklarirano na taj način. Dakle, moći ćete prosuditi tko je i tko nije bio u kontaktu s vašim kodom. Mogla bi se pokazati zanimljivom vježbom.

Dakle, da bi se odgovorilo na pitanje 1, nije potrebno proglasiti privatečlanove final.

Što se tiče pitanja 2, optimizacijski kompajler i JVM mogu iskoristiti privatemetode i finalmetode. Budući da potklase možda neće nadjačati te tipove, nema potrebe za dinamičkim vezivanjem za vrijeme izvođenja. Podrazredi nikada neće nadjačati metodu, pa će vrijeme izvođenja uvijek znati koju metodu pozvati bez pretraživanja hijerarhije nasljeđivanja. Tijekom kompajliranja optimizacijski kompajler može čak odabrati uvrštavanje svih privatei finalmetode za poboljšanje izvedbe.

Dakle, da bi odgovorili na pitanje 2, da, svi će sastavljači privatemetode tretirati kao final. Prevoditelj neće dopustiti nadjačavanje nijedne privatemetode. Isto tako, svi će kompajleri spriječiti potklase da nadjačaju finalmetode.

Zanimljivije pitanje: Hoće li svi prevoditelji optimizirati finals i privates tako da budu u redu? Kratki odgovor je negativan. Ponašanje optimizacije ovisit će o prevoditelju i njegovim postavkama.

Napomena: Naša rasprava o privatnom finalu odnosi se samo na metode. Privatne varijable konačnog člana tretiraju se drugačije

Saznajte više o ovoj temi

  • Želite više? Potpuni katalog Q&A potražite u Javinom indeksu pitanja i odgovora

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

Ova priča "Privatno i konačno?" izvorno je objavio JavaWorld.