Spørsmål: Gitt at:
privat
metoder kan ikke overstyres av underklasserendelig
metoder kan ikke overstyres av underklasserendelig
metoder muliggjør raskere kode når de kompileres med optimaliseringer på(javac -O)
Mine spørsmål er: EN: Som du påpeker, kan det hende at underklasser ikke overstyres Vel, praksisen med å erklære alt Så, for å svare på spørsmål 1, er det ikke nødvendig å erklære Når det gjelder spørsmål 2, kan en optimaliserende kompilator og JVM dra nytte av Så for å svare på spørsmål 2, ja, vil alle kompilatorer behandle Et mer interessant spørsmål: Vil alle kompilatorer optimalisere seg Merk: Diskusjonen vår om privatfinale gjelder bare metoder. Private endelige medlemsvariabler behandles forskjellig privat
metoder endelig
også?privat
metoder som endelig
?privat
metoder etter design. Videre er den endelig
nøkkelord forteller kompilatoren at underklasser kanskje ikke overstyrer en metode uavhengig av tilgangsnivå. Siden privat
innebærer allerede at en underklasse kanskje ikke overstyrer en metode, og erklærer en privat
metode å være endelig
er overflødig. Å avgi erklæringen vil ikke føre til problemer, men det vil heller ikke oppnå noe, siden privat
s blir automatisk vurdert endelig
. privat
metoder endelig
vil ha en bivirkning. Enhver nybegynner Java-programmerer som møter koden din, vil assimilere bruken av privat finale
, tenker det privat
s må erklæres på den måten. Så du vil kunne bedømme hvem som har og ikke har vært i kontakt med koden din. Det kan vise seg å være en interessant øvelse. privat
medlemmer endelig
. privat
metoder og endelig
metoder. Siden underklasser kanskje ikke overstyrer disse typene, er det ikke nødvendig å utføre dynamisk binding ved kjøretid. Underklasser vil aldri overstyre metoden, så kjøretiden vil alltid vite hvilken metode man skal ringe uten å søke i arvshierarkiet. Under kompilering kan en optimaliserende kompilator til og med velge å integrere alle privat
og endelig
metoder for å forbedre ytelsen. privat
metoder som endelig
. Kompilatoren tillater ikke noe privat
metoden som skal overstyres. På samme måte vil alle kompilatorer forhindre at underklasser overstyres endelig
metoder. endelig
s og privat
s slik at de er inline? Det korte svaret er nei. Optimaliseringsadferd vil være avhengig av kompilatoren og dens innstillinger.
Lær mer om dette emnet
- Ønsker mer? Se Java Q&A Indeks for hele Q&A katalogen
//www.javaworld.com/javaworld/javaqa/javaqa-index.html
Denne historien, "Privat og endelig?" ble opprinnelig utgitt av JavaWorld.