Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jirka 22. 04. 2014, 18:38:48
-
Ahoj všichni, rád bych věděl, jak dědičnost v Javě technicky vlastně funguje. Je to jako v C++, kdy se v paměti vytvoří prvně nadtřída a poté podtřída, nebo dochází pouze ke vložení proměnných a metod z nadtřídy do podtřídy ?
Je-li to jako v C++, tak jak je pak možné vytvářet podtřídy bez zavolání rodičovského konstruktoru, podotýkám rodičovského konstruktoru, který jsem sám vytvořil, žádný implicitní.
Je-li to pouze vložení proměnných a metod z nadtřídy do podtřídy, tak jak je pak možné, mít v podtřídě proměnnou stejného názvu jako v nadtřídě, Java nedovoluje na rozdíl od C++ potlačování proměnných.
Samozřejmě umím dědičnost v Javě používat, ale rád vím, jak věci fungují. Děkuji za odpovědi.
-
Je-li to jako v C++, tak jak je pak možné vytvářet podtřídy bez zavolání rodičovského konstruktoru, podotýkám rodičovského konstruktoru, který jsem sám vytvořil, žádný implicitní.
http://www.artima.com/designtechniques/initializationP.html
Je-li to pouze vložení proměnných a metod z nadtřídy do podtřídy, tak jak je pak možné, mít v podtřídě proměnnou stejného názvu jako v nadtřídě, Java nedovoluje na rozdíl od C++ potlačování proměnných.
http://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.4.1
-
V Javě se v konstruktoru vždy nejprve volá konstruktor předka a pak se provede tělo konstruktoru. Pokud voláte konstruktor předka explicitně, musí to být vždy první řádek konstruktoru. Pokud nezavoláte konstruktor předka explicitně, zavolá se automaticky implicitní konstruktor předka.
Pokud máte v předkovi field s viditelností private, potomek o něm vůbec nic neví a můžete si v něm úplně nezávisle na předkovi nadefinovat field stejného jména. Pokud je field v potomkovi viditelný, a vy si tam nadeklarujete field stejného jména, field z předka jím překryjete.
-
Ahoj všichni, rád bych věděl, jak dědičnost v Javě technicky vlastně funguje. Je to jako v C++, kdy se v paměti vytvoří prvně nadtřída a poté podtřída, nebo dochází pouze ke vložení proměnných a metod z nadtřídy do podtřídy ?
Je to jako v C++. Jediný rozdíl je, že virtuální metody přetížené potomkem se volají i z konstruktoru předka (v C++ se ty metody volají, jako by nebyly přetížené).
Je-li to jako v C++, tak jak je pak možné vytvářet podtřídy bez zavolání rodičovského konstruktoru, podotýkám rodičovského konstruktoru, který jsem sám vytvořil, žádný implicitní.
Je to stejné jako v C++. Pokud deklarujete vlastní konstruktor, žádný implicitní se nevytvoří (Java nemá kopírovací konstruktory). Pokud má třída víc konstruktorů, konstruktor v jejím potomkovi může volat libovolný. Pokud nevoláte žádný konstruktor explicitně, je implicitně zavolán konstruktor bez parametrů.
-
Díky všem, už je mi to jasné.