Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



dědičnost v javě

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

dědičnost v javě

Autor: Petr Dospiva

14:02:28 09.11.2011

Ahoj, začínam programovat a chtěl jsem se zeptat, jak funguje vytváření objektů.
Jde mi o případ, kdy mám BaseClass a od ní dědí ExtendClass.

public class BaseClass {
BaseClass() {
showText();
}
public void showText() {
System.out.println("call from base class");
}
public void showText2() {
System.out.println("test");
}
}

class ExtendClass extends BaseClass {
private String text;
private ExtendClass() {
text = "call from extend class";
System.out.println(text);
}
@Override
public void showText() {
System.out.println(text);
}

public static void main(String[] args) {
BaseClass ovrc = new ExtendClass();
ovrc.showText();
ovrc.showText2();
}
}

Toto skončí chybou, protože proměnná text není inicializována, což chápu.
Chápu taky, že se děje toto:
1. zavolá se konstruktor BaseClass.
2. Zavolá se překrytá metoda z ExtendClass, ale konstruktor ExtendsClass zatím neproběhl, takže proměnná text bude null.
3. Proměnná text je null, protže nebyla zatím inicializována, ale překrytou metodu showText(), zavolat jde, ikdyž neproběhl ještě konstruktor.

Jak je tedy možné, že se podaří z konstruktoru předka zovolat metodu z konstruktoru potomka ještě před vznikem odvozeného objektu ?
Jak to přesně funguje ?


Děkuji

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: