Abstraktní třídy/metody – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Abstraktní třídy/metody – Java – Fórum – Programujte.comAbstraktní třídy/metody – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
ViliX64+1
Návštěvník
3. 7. 2013   #1
-
0
-

Zdravím, chtěl bych se zeptat:
1. K čemu jsou abstraktní třídy, když ve trida1, která extends trida2 musím stejně napsat její tělo?

2. Abstraktní třídy jsou tvořeny jen k tomu, aby mohli být děděny?

3. Pokud trida1 extends trida2; trida2 extends trida3; a trida3 je abstraktní a má abstraktní metodu, tak tuto metodu musím definovat už ve trida2, nebo můžu i ve trida1?

Děkuji.

Nahlásit jako SPAM
IP: 88.101.227.–
KIIV
~ Moderátor
+43
God of flame
3. 7. 2013   #2
-
0
-

jsou k tomu, ze pak muzes dat   Abstraktni trida = new odvozena();   a pokud Abstraktni nema treba metodu x tak nemuzes udelat   trida.x();  musis pretypovat protoze pro Abstraktni to neexistuje

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Řešení
liborb
~ Redaktor
+18
Guru
3. 7. 2013   #3
-
0
-
Vyřešeno Nejlepší odpověď

add 1) právě k tomu jsou abstraktní třídy, že definují formu a obsah si pak musíš, když chceš od nich dědit, dodat sám

Příklad by mohl být ten, že máš grafické objekty, které dědí od třídy Objekt, která sama řeší třeba pohyb objektů (mění pozici x a y), takže všechny zděděné objekty už se umí pohybovat. Někde pak máš vykreslovací jádro, kde procházíš všechny vytvořené objekty (tak jak psal KIIV, tj. je to třeba seznam objektů typu Objekt, ale instance jsou vytvořené jako new Ctverec, new Kruh, new Trojuhelnik apod.) a volá nad nimi to vykreslení - funkci Kresli. Ta je v Objekt abstraktní, takže ji sice musíš implementovat v třídách Kruh, Ctverec, Trojuhelnik atd., ale co je podstatné, v tom vykreslovacím jadře nemusíš nic řešit a voláš prostě jen Kresli a je ti buřt, jestli to je Ctverec nebo Kruh a pak ještě (nebo možná a taky hlavně), když časem přidáš další typ objektu (třeba Sestiuhelnik), tak na tom vykreslovacím jádře nemusím měnit nic. To je síla tohoto principu.

add 2) ano, abstraktní třídy jsou tvořeny abstraktní právě proto, aby si je musel zdědit (a dopsat svojí implementační část)

add 3) kdeyž jí nedefinuješ v trida2, tak ta třída je taky abstraktní, takže pokud chceš používat i instance trida2, tak musíš implementovat tu abstraktní část a samozřejmě v trida1 můžeš tu implementaci udělat taky (a samozřejmě jinou, jinak by si jí asi nedělal :))

Nahlásit jako SPAM
IP: 188.75.135.–
ViliX64+1
Návštěvník
3. 7. 2013   #4
-
0
-

Moc děkuji za rozsáhlou odpověď, teď už to něják tak chápu.

Nahlásit jako SPAM
IP: 88.101.227.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý