Programmēšana

Privāts un galīgs?

J: Atsaucoties uz:

  • Privāts metodes nevar aizstāt ar apakšklasēm
  • galīgais metodes nevar ignorēt apakšklases
  • galīgais metodes ļauj ātrāku kodu, kad tos apkopo ar ieslēgtu optimizāciju (javac -O)

Mani jautājumi ir:

  1. Kāpēc gan nedeklarēt visus Privāts metodes galīgais arī?
  2. Vai lielākā daļa kompilatoru ārstē Privāts metodes kā galīgais?

A: Kā jūs norādāt, apakšklases var nebūt ignorētas Privāts metodes pēc konstrukcijas. Turklāt galīgais atslēgvārds kompilatoram saka, ka apakšklases nedrīkst ignorēt metodi neatkarīgi no tās piekļuves līmeņa. Kopš Privāts jau nozīmē, ka apakšklase nedrīkst ignorēt metodi, deklarējot a Privāts metode būt galīgais ir lieks. Deklarācijas sagatavošana neradīs problēmas, taču arī tā neko nedos, jo Privātss tiek automātiski izskatīti galīgais.

Nu, prakse deklarēt visus Privāts metodes galīgais būs viena blakusparādība. Jebkurš iesācējs Java programmētājs, kurš sastopas ar jūsu kodu, pielīdzinās jūsu lietojumu privātais fināls, domājot par to Privātss jādeklarē tādā veidā. Tātad jūs varēsiet spriest, kam ir un kas nav sazinājies ar jūsu kodu. Tas varētu izrādīties interesants vingrinājums.

Tātad, lai atbildētu uz 1. jautājumu, nav jādeklarē Privāts biedri galīgais.

Attiecībā uz 2. jautājumu optimizējošais kompilators un JVM var izmantot Privāts metodes un galīgais metodes. Tā kā apakšklases nedrīkst ignorēt šos tipus, nav nepieciešams veikt dinamisko saistīšanu izpildlaikā. Apakšklases nekad neatcels metodi, tāpēc izpildlaiks vienmēr zinās, kuru metodi izsaukt, nemeklējot mantojuma hierarhiju. Kompilēšanas laikā optimizējošais kompilators var pat izvēlēties iekļaut visus Privāts un galīgais metodes veiktspējas uzlabošanai.

Tātad, lai atbildētu uz otro jautājumu, jā, visi sastādītāji izturēsies Privāts metodes kā galīgais. Sastādītājs neļaus nevienu Privāts metode tiek ignorēta. Tāpat visi kompilatori novērsīs apakšklases ignorēšanu galīgais metodes.

Interesantāks jautājums: vai visi kompilatori optimizēsies galīgaissmiltis Privātss tā, lai tie būtu vienā līnijā? Īsā atbilde ir nē. Optimizācijas darbība būs atkarīga no kompilatora un tā iestatījumiem.

Piezīme: Mūsu diskusija par privāto finālu attiecas tikai uz metodēm. Privātie galīgo dalībnieku mainīgie tiek apstrādāti atšķirīgi

Uzziniet vairāk par šo tēmu

  • Vēlas vairāk? Skatīt Java jautājumi un atbildes Pilna jautājumu un atbilžu kataloga indekss

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

Šis stāsts "Privāts un galīgs?" sākotnēji to publicēja JavaWorld.

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