Zdravím, chtěl bych se zeptat, k čemu se používá rozhraní/interface, když téhož efektu můžu dosáhnout abstraktními třídami bez "funkčních" metod?
Fórum › Java
Abstraktní metody a rozhrání
Ano abstraktními metodami můžeš docílit stejného efektu jako kdyby jsi musel implementovat rozhraní. Problém je však v tom, že potomek by měl s touto abstraktní třídou nějak logicky souviset (rozšiřovat ji). Na rozdíl rozhraní můžeš implementovat do logicky odlišných tříd (v hierarchii spolu nijak nesouvisí => nemusí mít vždy stejného předka, ale přesto mají nějakou stejnou vlastnost).
Dejme tomu, že budeš chtít naprogramovat grafický editor. Ten by měl umět vykreslovat jak geometrické obrazce (čtverec, obdélník ...) tak obrázky. Navrhnul by sis tedy abstraktní třídu GeometrickyObjekt, která by měla abstraktní metodu vykreslit(). Následně by sis vytvořil řadu tříd Ctverec, Obdelnik ... které by byly potomky třídy GeometrickyObjekt. Pro reprezentaci obrázku by sis vytvořil třídu Obrazek. Ale obrázek není geometrický objekt, takže by nebylo správné z ní udělat potomka třídy GeometrickyObjekt jen proto aby měla metodu vykreslit(). K tomu by tedy mohlo posloužit rozhraní pojmenované třeba MuzeBytVykresleno, ktere by obsahovalo metodu vykreslit(). Toto rozhraní by implementoval jak GeometrickyObjekt tak třída Obrazek.
Díky tomu by jsi mohl napsat metodu pro vykreslení všech "vykreslitelných objektů" a bylo by jedno jestli to jsou geometrické objekty nebo něco jiného.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Abstraktní třídy/metody — založil ViliX64
C# Abstakrní metody & rozhraní — založil Petrroll
Přetransformovat abstraktní třídu na ne-abstraktní — založil geryeo
Abstraktní třídy — založil tom*p
Moderátoři diskuze