Programavimas

Privatus ir galutinis?

Klausimas: Turint omenyje:

  • privatus metodų negalima panaikinti poklasiais
  • galutinis metodų negalima panaikinti poklasiais
  • galutinis metodai leidžia greičiau koduoti, kai yra sudaromi optimizuojant (javac -O)

Mano klausimai yra:

  1. Kodėl nedeklaravus visų privatus metodai galutinis taip pat?
  2. Ar dauguma kompiliatorių gydo privatus metodai kaip galutinis?

A: Kaip pažymite, poklasiai negali būti nepaisomi privatus metodai pagal dizainą. Be to, galutinis Raktažodis nurodo kompiliatoriui, kad poklasiai negali nepaisyti metodo, nepaisant jo prieigos lygio. Nuo privatus jau reiškia, kad poklasis negali nepaisyti metodo, skelbdamas a privatus metodas būti galutinis yra nereikalingas. Deklaracijos pateikimas nesukels problemų, tačiau taip pat nieko nepasieks, nes privatuss automatiškai laikomi galutinis.

Na, visų deklaravimo praktika privatus metodai galutinis turės vieną šalutinį poveikį. Bet kuris pradedantysis „Java“ programuotojas, susidūręs su jūsų kodu, įsisavins jūsų naudojimą privatus finalas, galvodamas privatuss turi būti deklaruojami tokiu būdu. Taigi galėsite nuspręsti, kas turi ir kas nesusisiekė su jūsų kodu. Tai gali pasirodyti įdomus pratimas.

Taigi, norint atsakyti į 1 klausimą, nereikia deklaruoti privatus nariai galutinis.

Kalbant apie 2 klausimą, gali pasinaudoti optimizuojantis kompiliatorius ir JVM privatus metodai ir galutinis metodai. Kadangi poklasiai negali nepaisyti šių tipų, nereikia vykdyti dinaminio susiejimo vykdymo metu. Poklasiai niekada nepaisys metodo, todėl vykdymo laikas visada žinos, kokį metodą iškviesti, neieškodamas paveldėjimo hierarchijos. Kompiliavimo metu optimizuojantis kompiliatorius netgi gali pasirinkti įterpti visus privatus ir galutinis efektyvumo gerinimo metodai.

Taigi, atsakydami į 2 klausimą, taip, visi kompiliatoriai elgsis privatus metodai kaip galutinis. Kompiliatorius neleis jokių privatus metodas turi būti nepaisomas. Panašiai visi kompiliatoriai neleis poklasiams nepaisyti galutinis metodai.

Įdomesnis klausimas: ar visi kompiliatoriai optimizuos galutinissmėlis privatuss taip, kad jie būtų tiesūs? Trumpas atsakymas - ne. Optimizavimo elgsena priklausys nuo kompiliatoriaus ir jo nustatymų.

Pastaba: Mūsų diskusija apie privatų finalą taikoma tik metodams. Privačių galutinių narių kintamieji traktuojami skirtingai

Sužinokite daugiau apie šią temą

  • Norite daugiau? Žr „Java“ klausimai ir atsakymai Viso klausimų ir atsakymų katalogo rodyklė

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

Ši istorija „Privati ​​ir galutinė?“ iš pradžių buvo išleista „JavaWorld“.

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