Programování

Soukromé a konečné?

Otázka: Vzhledem k tomu, že:

  • soukromé metody nelze přepsat podtřídami
  • finále metody nelze přepsat podtřídami
  • finále metody umožňují rychlejší kód při kompilaci s optimalizací na (javac -O)

Moje otázky jsou:

  1. Proč ne prohlásit všechny soukromé metody finále také?
  2. Dělá to většina překladačů soukromé metody jako finále?

A: Jak podotknete, podtřídy nemusí přepsat soukromé metody záměrné. Kromě toho finále klíčové slovo říká kompilátoru, že podtřídy nemusí přepsat metodu bez ohledu na její úroveň přístupu. Od té doby soukromé již znamená, že podtřída nemusí přepsat metodu, deklarovat a soukromé metoda být finále je nadbytečné. Vytvoření deklarace nezpůsobí problémy, ale od té doby také nic nedosáhne soukromés jsou považovány automaticky finále.

Praxe deklarovat vše soukromé metody finále bude mít jeden vedlejší účinek. Každý začínající programátor Java, který narazí na váš kód, asimiluje vaše použití soukromé finálemyslet si to soukromés musí být deklarováno tímto způsobem. Budete tedy moci posoudit, kdo má a kdo nebyl v kontaktu s vaším kódem. Mohlo by to být zajímavé cvičení.

K zodpovězení otázky 1 tedy není třeba prohlašovat soukromé členů finále.

Pokud jde o otázku 2, optimalizační kompilátor a JVM mohou využít výhody soukromé metody a finále metody. Vzhledem k tomu, že podtřídy nemusí tyto typy přepsat, není nutné za běhu provádět dynamickou vazbu. Podtřídy metodu nikdy nepotlačí, takže modul runtime vždy bude vědět, jakou metodu volat, aniž by prohledával hierarchii dědičnosti. Během kompilace se může optimalizující kompilátor dokonce rozhodnout vložit všechny soukromé a finále metody ke zlepšení výkonu.

Abychom odpověděli na otázku 2, ano, všichni kompilátoři zacházejí soukromé metody jako finále. Kompilátor žádné nepovolí soukromé způsob, který má být přepsán. Podobně všechny kompilátory zabrání přepsání podtříd finále metody.

Zajímavější otázka: Budou všichni kompilátoři optimalizovat fináles a soukrométak, aby byly vložené? Krátká odpověď je ne. Chování optimalizace bude záviset na kompilátoru a jeho nastavení.

Poznámka: Naše diskuse o soukromém finále se vztahuje pouze na metody. S proměnnými soukromých konečných členů se zachází odlišně

Další informace o tomto tématu

  • Chcete více? Viz Java Q&A Rejstřík pro celý katalog otázek a odpovědí

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

Tento příběh: „Soukromý a konečný?“ byl původně publikován společností JavaWorld.