Rozdíl mezi abstraktní třídou a rozhraním (s tabulkou)

Rozdíl mezi abstraktní třídou a rozhraním (s tabulkou)

Jak všichni víme, abstrakce se týká vnitřní implementace funkce a pouze zobrazení praktičnosti uživatelům. tj. co to funguje (zobrazeno, Rozhraní však nabízí úplnou abstrakci v Javě, kterou abstraktní kategorie neumí.

Abstraktní třída vs rozhraní

 Hlavní rozdíl mezi abstraktní třídou a rozhraním je v tom, že přidružené rozhraní rozšíří pouze další rozhraní Java; přidružená abstraktní kategorie vytvoří další kategorii Java a implementuje více rozhraní Java. Členové rozhraní Java se ve výchozím nastavení veřejně liší. Abstraktní kategorie Java bude mít členy kategorie jako osobní, chráněné atd.

Rozdíl mezi abstraktní třídou a rozhraním

Abstraktní třída je třída, která má ve své deklaraci klíčové slovo abstract. V abstraktních třídách by měla být přítomna alespoň jedna abstraktní metoda, tj. metody bez těla. Může mít různé konkrétní metody.

Abstraktní třídy můžete použít ke generování plánů pro konkrétní třídy. Abstraktní metoda však musí být implementována dědící třídou.

Rozhraní je plán pro třídu, kterou lze použít k jejímu vytvoření. Rozhraní nemá žádné konkrétní metody (metody, které mají kód). Všechny metody rozhraní jsou abstraktní metody.

Není možné vytvořit rozhraní. Na druhé straně třídy, které implementují rozhraní, mohou být konkretizovány. Proměnné instance se v rozhraních nikdy nepoužívají. Lze však použít veřejné statické konečné proměnné (známé také jako proměnné konstantní třídy).

Co je abstraktní třída?

Abstraktní třída je základní koncept v objektově orientovaném programování (OOP), který slouží jako plán nebo šablona pro jiné třídy. Je to třída, která nemůže být konkretizována a je určena k rozšíření nebo podtřídě jinými třídami. Abstraktní třídy definují společné atributy a metody, které bude sdílet více příbuzných tříd v rámci hierarchie dědičnosti.

Mezi klíčové vlastnosti a vlastnosti abstraktních tříd patří:

  1. Nelze vytvořit instanci: Abstraktní třídu nelze použít k přímému vytváření objektů nebo instancí. Místo toho poskytuje rámec pro podtřídy, které mohou dědit a implementovat jeho vlastnosti a metody.
  2. Může obsahovat abstraktní metody: Abstraktní třídy zahrnují jednu nebo více abstraktních metod. Deklarace metod bez jakýchkoli podrobností o implementaci. Podtřídy musí poskytovat konkrétní implementace pro tyto abstraktní metody.
  3. Může obsahovat konkrétní metody: Abstraktní třídy mohou mít také konkrétní (plně implementované) metody, které mohou podtřídy zdědit. Tyto metody mohou poskytovat společné funkce sdílené všemi podtřídami.
  4. Používá se pro opětovné použití kódu: Abstraktní třídy podporují znovupoužitelnost kódu a princip DRY (Don't Repeat Yourself) tím, že umožňují definovat společný kód v jediné abstraktní třídě a sdílet jej mezi souvisejícími podtřídami.
  5. Dědictví: Podtřídy dědí atributy a metody definované v abstraktní třídě. To umožňuje specializaci a přizpůsobení chování při zachování společné struktury.
  6. Abstraktní vs. konkrétní třídy: Abstraktní třídy se liší od konkrétních tříd, které mohou být vytvořeny přímo. Konkrétní třídy poskytují úplné implementace pro všechny své metody.

V jazycích jako Java a C# klíčové slovo „abstract“ definuje abstraktní třídy. Abstraktní třídy jsou cennými nástroji pro vytváření hierarchií souvisejících tříd, které sdílejí společné vlastnosti a chování a zároveň umožňují přizpůsobení a specializaci v odvozených třídách.

Co je rozhraní?

Rozhraní je základní koncept v objektově orientovaném programování (OOP), který definuje smlouvu nebo sadu podpisů metod, které musí být implementovány jakoukoli třídou, která se drží rozhraní. Rozhraní poskytují způsob, jak dosáhnout vícenásobné dědičnosti v jazycích, které jej přímo nepodporují, a podporují abstrakci kódu, modularitu a flexibilitu.

Mezi klíčové vlastnosti a vlastnosti rozhraní patří:

  1. Podpisy metody: Rozhraní definuje kolekci podpisů metod bez podrobností o implementaci. Tyto podpisy metod představují sadu chování, které musí implementační třídy poskytovat.
  2. Smluvní závazek: Když třída implementuje rozhraní, musí poskytovat konkrétní implementace pro všechny metody definované v tomto rozhraní. Pokud tak neučiníte, dojde k chybě kompilace.
  3. Vícenásobná dědičnost: Na rozdíl od tříd, které podporují jedinou dědičnost (rozšíření jedné třídy), třída může implementovat více rozhraní. To umožňuje třídě dědit a poskytovat více sad chování.
  4. Abstrakce a polymorfismus: Rozhraní podporují abstrakci tím, že oddělují „co“ (podpisy metody) od „jak“ (implementace metod). Tato abstrakce umožňuje polymorfismus, kdy lze s objekty různých tříd implementující stejné rozhraní zacházet zaměnitelně.
  5. Znovupoužitelnost kódu: Rozhraní usnadňují opětovné použití kódu tím, že definují běžné chování, které mohou různé třídy implementovat. To podporuje princip DRY (Don't Repeat Yourself).
  6. Flexibilita: Rozhraní umožňují volně spojený kód tím, že umožňují zaměnitelnost tříd na základě rozhraní, která implementují. Tato flexibilita je užitečná zejména při navrhování modulárních a rozšiřitelných systémů.

Rozhraní jsou široce používána v jazycích jako Java, C# a TypeScript k definování a vynucování smluv mezi třídami a zajišťují, že dodržují specifikované API (Application Programming Interface) a sdílejí společné chování a zároveň umožňují různé implementace.

Srovnávací tabulka mezi abstraktní třídou a rozhraním

 Parametry diferenciaceAbstraktní třídaRozhraní
InstanciaceNelze vytvořit instanci přímo.Nelze jej vytvořit přímo.
ÚčelSlouží jako plán pro ostatní třídy a může poskytnout obě deklarace metod s implementací nebo bez ní.Nelze jej vytvořit přímo.
MetodyMůže mít abstraktní (neimplementované) metody, konkrétní (implementované) metody nebo kombinaci obou.Obsahuje pouze podpisy metod bez jakýchkoli implementací; všechny metody jsou implicitně abstraktní.
Vícenásobné dědictvíPodporuje jedinou dědičnost; třída může rozšířit pouze jednu abstraktní třídu.Podporuje vícenásobnou dědičnost; třída může implementovat více rozhraní.
KonstruktoryMůže mít konstruktory, které jsou vyvolány při vytvoření instance podtřídy.Nemůže mít konstruktory, protože nemohou být vytvořeny přímo.
Znovupoužitelnost kóduPodporuje opětovnou použitelnost kódu tím, že umožňuje sdílení společného kódu mezi souvisejícími třídami.Podporuje opětovnou použitelnost kódu tím, že definuje společné sady chování, které musí třídy implementovat.
FlexibilitaNabízí rovnováhu mezi abstrakcí a poskytováním běžných funkcí.Klade důraz na abstrakci a specifikaci smlouvy.
Případy užitíUžitečné pro vytváření hierarchií souvisejících tříd se sdíleným chováním a atributy.Užitečné pro definování smluv, které zajišťují, že implementační třídy poskytují specifické chování.
Příkladabstract class Shape { abstract double area(); }interface Drawable { void draw(); }
ScénářUžitečné, když chcete poskytnout společnou základní třídu s určitým výchozím chováním, ale ponechat konkrétní metody, které mají být implementovány podtřídami.Užitečné, když chcete definovat smlouvu nebo sdílenou sadu chování napříč více třídami, aniž byste museli diktovat společnou základní třídu.

Hlavní rozdíly mezi Abstraktní třída a rozhraní

Abstraktní třída:

  • Může mít jak abstraktní (neimplementované), tak konkrétní (implementované) metody.
  • Podporuje jedinou dědičnost, což znamená, že třída může rozšířit pouze jednu abstraktní třídu.
  • Může mít konstruktory pro inicializaci stavů objektů.
  • Umožňuje vytvoření základní třídy s výchozím chováním.
  • Poskytuje rovnováhu mezi abstrakcí a běžnou funkčností.
  • Užitečné při vytváření hierarchií souvisejících tříd se sdílenými atributy a chováním.

rozhraní:

  • Obsahuje pouze podpisy metod bez jakýchkoli implementací; všechny metody jsou implicitně abstraktní.
  • Podporuje vícenásobnou dědičnost, což znamená, že třída může implementovat více rozhraní.
  • Nemůže mít konstruktory, protože rozhraní nelze konkretizovat.
  • Definuje smlouvu specifikující sadu metod, které musí implementační třídy poskytovat.
  • Zdůrazňuje abstrakci a specifikaci sdílené sady chování.
  • Užitečné pro definování smluv a zajištění toho, aby třídy dodržovaly specifické požadavky API.

Proč investovat do čističky vzduchu?

Abstraktní třída vám umožňuje vytvářet funkce, které mohou podtřídy implementovat nebo přepsat, zatímco rozhraní vám umožňuje uvést, ale neimplementovat funkce. Zatímco třída může rozšířit pouze jednu abstraktní třídu, může implementovat několik rozhraní.

Odkaz

  1. https://dl.acm.org/doi/abs/10.1145/1040305.1040314
  2. https://books.google.com/books?hl=en&lr=&id=8M3F_sSSvWkC&oi=fnd&pg=PR13&dq=+interface+java&ots=Qo15NiH18i&sig=Y6OESYd5a6G709ynnLGB4Ry97yU
tečka 1
Jedna žádost?

Vynaložil jsem tolik úsilí, abych napsal tento blogový příspěvek, abych vám poskytl hodnotu. Bude to pro mě velmi užitečné, pokud zvážíte sdílení na sociálních sítích nebo se svými přáteli / rodinou. SDÍLENÍ JE ♥️

Avatar Nidhi

O NásNidhi

Ahoj! Jsem Nidhi.

Tady v EHL je to všechno o lahodných a jednoduchých receptech pro příležitostnou zábavu. Tak pojď a přidej se ke mně na pláž, odpočiň si a vychutnej si jídlo.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *