Rozdíl mezi rozhraním a abstraktní třídou v jazyce Java

Klíčový rozdíl: Rozhraní nebo protokol je běžný způsob, který umožňuje vzájemně komunikovat nesouvisející objekty. Představuje dohodnuté chování, které usnadňuje interakci mezi oběma objekty. Abstraktní třída je třída objektů, které nelze instancovat nebo nastavit instanci objektu. Tato třída nemusí mít implementaci nebo může mít neúplnou implementaci.

Java, C ++, C # jsou komplikované programovací jazyky, které vyžadují podrobné studium a pochopení, s nimiž je možné pracovat. Existuje mnoho různých metod, které jsou používány v těchto jazycích, které rozhodují o tom, jak bude fungovat jazyk. Rozhraní a Abstraktní třída jsou dvě matoucí koncepce, které jsou součástí OOP (objektově orientované programování). Tyto dvě mohou být použity jednotlivě nebo společně. Tyto dva jsou navzájem zcela odlišné a používají se v různých případech.

Java je programovací jazyk, který byl ovlivněn jazykem C. Odvozuje hodně své syntaxe od C a C ++, nicméně má méně zařízení na nižší úrovni než jedna. Java je univerzální programovací jazyk, který je navržen tak, aby měl v porovnání s předchozími jazyky menší závislost na implementaci. Je to souběžný, třídní a objektově orientovaný jazyk.

Java byl vyvinut Jamesem Goslingem v Sun Microsystems a byl vydán v roce 1995. Původně byl vydán jako základní součást platformy Java společnosti Sun Microsystems. Společnost Sun od té doby licencovala většinu svých technologií Java pod GNU General Public License. To znamená, že veškerá technologie licencovaná podle GNU General Public Licence je open source a obecně dostupná zdarma. Společnost Sun Microsystems se nakonec sloučila do společnosti Oracle Corporation. Od roku 2012 se program Java stal jedním z nejpopulárnějších programovacích jazyků pro použití. To platí zejména pro webové aplikace klient-server. Mnoho dalších systémů vyvinulo alternativní implementace technologií Sun, jako je GNU Compiler for Java a GNU Classpath.

Rozhraní nebo protokol je běžný způsob, který umožňuje vzájemně komunikovat nesouvisející objekty. Představuje dohodnuté chování, které usnadňuje interakci mezi oběma objekty. Rozhraní obsahuje klíč k různým provedeným akcím a slouží jako spojení mezi dvěma různými objekty. Pokud je třída objektů vystavena rozhraní, třída by se měla řídit chováním implementovaným rozhraním. Obvykle obsahují pouze konstantní deklarace a podpisy metod. Všechna rozhraní, která implementuje určité rozhraní, musí použít všechny metody uvedené v rozhraní nebo být deklarovány jako abstraktní třída. V jazyce Java může být jakýkoli objekt definován jako rozhraní, je-li tento objekt null nebo obsahuje třídu, ve které implementuje toto konkrétní rozhraní. Jeden může implementovat více rozhraní do jedné třídy v jazyce Java pomocí klíčových slov implementace.

Abstraktní třída je třída objektů, které nelze instancovat nebo nastavit instanci objektu. Tato třída nemusí mít implementaci nebo může mít neúplnou implementaci. Může také mít abstraktní metody nebo vlastnosti, které jsou sdíleny všemi podtřídami. V některých programovacích jazycích jsou abstraktní typy bez implementace známy jako rozhraní. V jazyce Java lze vytvořit abstraktní typ pomocí klíčového slova "abstrakt" v definici třídy. Účelem abstraktní třídy umístit všechny metody, které nejsou implementovány v abstraktní třídě, a nechat ji v podtřídě, aby zjistila, jak tyto třídy implementovat. Pokud má třída jednu abstraktní metodu, musí být třída deklarována jako abstraktní třída, ačkoli není nutné mít alespoň jednu metodu pro vyhlášení třídního abstraktu.

Malliktalksjava.in uvádí hlavní rozdíly mezi rozhraním a abstraktí jako:

  • Abstraktní třída má konstruktor, ale rozhraní není.
  • Abstraktní třídy mohou mít implementace pro některé ze svých členů (Metody), ale rozhraní nemůže implementovat žádné členy.
  • Abstraktní třídy by měly mít jiné podtřídy, které budou zbytečné.
  • Rozhraní musí mít implementace jinými třídami, které budou zbytečné
  • Pouze rozhraní může rozšířit další rozhraní, ale každá třída může rozšířit abstraktní třídu.
  • Veškeré proměnné v rozhraních jsou ve výchozím nastavení konečné
  • Rozhraní poskytují formu dědičného dědictví. Třída může rozšířit pouze jednu jinou třídu.
  • Rozhraní jsou omezena na veřejné metody a konstanty bez implementace. Abstraktní třídy mohou mít částečnou implementaci, chráněné součásti, statické metody atd.
  • Třída může implementovat několik rozhraní. Ale v případě abstraktní třídy může třída rozšířit pouze jednu abstraktní třídu.
  • Rozhraní jsou pomalé, protože vyžaduje další navigaci pro nalezení odpovídající metody v aktuální třídě. Abstraktní třídy jsou rychlé.
  • Modifikátor usnadnění (veřejné / soukromé / interní) je povolen pro abstraktní třídu. Rozhraní neumožňuje modifikátor přístupu
  • Abstraktní třída může obsahovat úplné nebo neúplné metody. Rozhraní mohou obsahovat pouze podpis metody, ale žádné tělo. Takže abstraktní třída může implementovat metody, ale rozhraní nemůže implementovat metody.
  • Abstraktní třída může obsahovat pole, konstruktory nebo destruktory a implementovat vlastnosti. Rozhraní nemůže obsahovat pole, konstruktory nebo destruktory a má pouze podpis vlastností, ale žádnou implementaci.
  • Různé modifikátory přístupu, jako jsou abstraktní, chráněné, interní, veřejné, virtuální atd., Jsou užitečné v abstraktních třídách, ale ne v rozhraní.
  • Abstraktní oblast působnosti je odvozená třída.
  • Rozsah rozhraní je až na jakoukoli úroveň jeho dědičného řetězce.

Informace pro tabulku jsou zdvořile obsaženy v codeproject.com a mindprod.com

Rozhraní

Abstraktní třída

Více dědičnosti

Třída může dědit několik rozhraní.

Třída může dědit pouze jednu abstraktní třídu.

Výchozí implementace

Rozhraní nemůže poskytnout žádný kód, jen podpis.

Abstraktní třída může poskytnout úplný, výchozí kód a / nebo jen podrobnosti, které je třeba přepsat.

Modifikátory přístupu

Rozhraní nemůže mít modifikátory přístupu pro subs, funkce, vlastnosti atd. Vše je považováno za veřejné.

Abstraktní třída může obsahovat modifikátory přístupu pro subsystémy, funkce a vlastnosti.

Core vs. Peripheral

Rozhraní se používá k definování periferních schopností třídy. Jinými slovy, lidské i vozidlo mohou dědit z rozhraní pro přenosné médium.

Abstraktní třída definuje jádrovou identitu třídy a tam se používá pro objekty stejného typu.

Homogenita

Pokud různé implementace sdílejí pouze podpisy metod, je lepší použít rozhraní.

Pokud jsou různé implementace stejného druhu a používají běžné chování nebo stav, pak je lepší použít abstraktní třídu.

Rychlost

Vyžaduje více času k nalezení skutečné metody v odpovídajících třídách.

Rychle

Přidání funkcí

Pokud do rozhraní přidáme novou metodu, musíme vysledovat všechny implementace rozhraní a definovat implementaci nové metody.

Pokud do abstraktní třídy přidáme novou metodu, pak máme možnost poskytnout výchozí implementaci, a proto by veškerý existující kód mohl pracovat správně.

Pole a konstanty

V rozhraních nelze definovat žádná pole.

Abstraktní třída může mít pole a konstanty definované.

Pevnost

Konstantní deklarace v rozhraní jsou předpokládané veřejné statické konečné.

Sdílený kód lze přidat do abstraktní třídy.

Konstanty

Pouze statické koncové konstanty, mohou je používat bez kvalifikace v třídách, které implementují rozhraní.

Jsou možné příklady i statické konstanty. Statické i instanční kód jsou také možné pro výpočet konstant.

Pohodlí třetí strany

Implementace rozhraní může být přidána do jakékoli existující třídy třetích stran.

Třída třetí osoby musí být přepsána, aby se rozšířila pouze z abstraktní třídy.

je-a versus -able nebo can-do

Rozhraní se často používají k popisu periferních schopností třídy, nikoli k její centrální identitě, např. Třída Automobile by mohla implementovat rozhraní Recyklovatelné, které by se mohlo vztahovat na mnoho jinak zcela nesouvisejících objektů.

Abstraktní třída definuje základní identitu svých potomků. Implementovaná rozhraní vymezují obecné věci, které může určitá třída dělat, a ne to, co je třída.

V kontextu Java uživatelé by měli zpravidla implementovat rozhraní Runnable spíše než rozšiřovat vlákno, protože nemají opravdu zájem poskytovat některé nové funkce Thread, obvykle chtějí, aby nějaký kód měl schopnost běžící samostatně. Chtějí vytvořit něco, co může být spuštěno v nitě, nikoliv nový typ nitě. Podobná je-a vs. - debata nastává, když se rozhodnete dědit nebo delegovat.

Zapojit

Uživatel může napsat nový náhradní modul pro rozhraní, které neobsahuje ani jeden kus kódu společného se stávajícími implementacemi. Když uživatel implementuje rozhraní, začíná od nuly bez implicitní implementace. Uživatel musí získat nástroje z jiných tříd; nic jiného než rozhraní s několika konstantami. To dává uživateli možnost implementovat radikálně odlišný vnitřní návrh.

Uživatel musí používat abstraktní třídu jako-je pro kódovou základnu se všemi jeho doprovodnými zavazadly, dobrou nebo špatnou. Autor abstraktní třídy uloží uživateli strukturu.

Údržba

Pokud kód klienta mluví pouze s ohledem na rozhraní, můžete snadno změnit konkrétní implementaci za ním pomocí tovární metody.

Pokud kód klienta mluví pouze o abstraktní třídě, můžete snadno změnit konkrétní implementaci za tím, že použijete tovární metodu.

Doporučená

Související Články

  • populární srovnání: Rozdíl mezi šerifem a Cop

    Rozdíl mezi šerifem a Cop

    Klíčový rozdíl : Rozdíl mezi policistou a šerifem se týká jejich oblasti působnosti. Šerif je zvolen občany a v jeho kraji udržuje zákon a pořádek. Policista je vládní úředník, který se stará o vymáhání práva v konkrétním městě, obci, městě nebo vesnici. Policisté a šerifi jsou mírní důstojníci, kteří riskují svůj život pro bezpečnost a bezpečnost svých komunit. Oba oba patří do organizace pro vymáhání prá
  • populární srovnání: Rozdíl mezi bankou a úvěrovou unií

    Rozdíl mezi bankou a úvěrovou unií

    Hlavní rozdíl: Banky jsou soukromé instituce, které svým zákazníkům poskytují bankovní služby. Družstevní záložny jsou neziskové instituce, které vlastní a řídí její členové. Banky a družstevní záložny mají spíše podobnou povahu, neboť poskytují finanční služby, jako jsou spořitelní účty a úvěry na bydlení. V některých klíčových charakteristikách s
  • populární srovnání: Rozdíl mezi Bajaj Pulsar 180cc DTSI a Bajaj Pulsar 220cc DTSI

    Rozdíl mezi Bajaj Pulsar 180cc DTSI a Bajaj Pulsar 220cc DTSI

    Klíčový rozdíl: Bajaj Pulsar 180cc DTS-i a DTS-i 220cc jsou oba produkty od firmy pojmenované jako Bajaj Auto. Oba jsou vybaveny technologií DTS-i. V mnoha specifikacích se liší. Pulsar 180 cc DTS-i je dobrá hodnota za peníze a může být upřednostňován pro svůj nejvyšší sportovní vzhled. Na druhou stranu, po
  • populární srovnání: Rozdíl mezi iPhone 5C a iPhone 4S

    Rozdíl mezi iPhone 5C a iPhone 4S

    Hlavní rozdíl: iPhone 5C je levnější variantou iPhone 5S od společnosti Apple Inc. iPhone 4S předchází iPhone 4S a byl zahájen po iPhone 4. Byl oficiálně propuštěn v říjnu 2011. Apple oznámil dva nové modely telefonů, iPhone 5S a iPhone 5C. Telefon byl spuštěn 10. září 2013. iPhone 5C je hlavně považován za levnější variantu iPhone 5S. Nicméně, zatímco to je levně
  • populární srovnání: Rozdíl mezi hlídaním a péčí o děti

    Rozdíl mezi hlídaním a péčí o děti

    Klíčový rozdíl: Hlídání dětí je druh péče o děti, kde se teenagery starají o děti, výměnou za nějaké kapesné. Péče o děti je aktem péče a dozoru nad dítětem v nepřítomnosti jeho rodičů / opatrovníků. Hlídání dětí je vlastně druh péče o děti, kdy se teenageři dočasně starají o děti, dokud se jejich rodiče / opatrovníci nevrátí z práce. Babysittery jsou obecně teenageři, kteří chtějí v
  • populární srovnání: Rozdíl mezi LG Optimus L7 II Dual a Nexus 4

    Rozdíl mezi LG Optimus L7 II Dual a Nexus 4

    Hlavní rozdíl: LG Optimus L7 II Dual je telefon střední třídy od společnosti LG. Telefon je telefon s dvou SIM kartami. Zařízení je vybaveno 4, 3 palcovým IPS LCD, kapacitní dotykovou obrazovkou s rozlišením 480 x 800 pixelů. Spouští se v systému Android v 4.1.2 (JellyBean), který je podporován procesorem Snapdragon Qualcomm MSM8225 Snapdragon s dvojjádrovým výkonem 1, 0 GHz a 768 MB paměti RAM. Nexus 4 je čtvrtý Andr
  • populární srovnání: Rozdíl mezi Samsung Galaxy S4 Mini a Samsung Galaxy S4

    Rozdíl mezi Samsung Galaxy S4 Mini a Samsung Galaxy S4

    Klíčový rozdíl: Společnost Samsung oficiálně oznámila malému bratrovi své zcela nové vlajkové lodi: Samsung Galaxy S4 Mini. Telefon je dodáván s 4, 3 palcovou kapacitní dotykovou obrazovkou qHD Super AMOLED s kapacitou ~ 256 ppi. Hmotnost telefonu byla také snížena na 107 gramů pro model 3G a 108 gramů pro model LTE. Samsung Galaxy S4
  • populární srovnání: Rozdíl mezi mzdovým účtem a běžným účtem v bankách

    Rozdíl mezi mzdovým účtem a běžným účtem v bankách

    Hlavní rozdíl: Mzdový účet je bankovní účet určený a nabízen hlavně osobám s platy. Na druhou stranu běžný účet je účet, který je navržen tak, aby vyhovoval potřebám podnikatelů, firem, společností, veřejných podniků apod. Každý z nich má své výhody a výhody. V podstatě v dnešním světě má každý bankovní účet. Bankovní účet usnadňuje skladování a využíván
  • populární srovnání: Rozdíl mezi CTBT a NPT

    Rozdíl mezi CTBT a NPT

    Klíčový rozdíl: Svět se snaží ovládat chemické a jaderné zbraně. CTBT, což je Smlouva o úplném zákazu testování, je smlouvou, která zakazuje všechny jaderné výbuchy ve všech prostředích. Smlouva o nešíření jaderných zbraní znamená Smlouvu o nešíření jaderných zbraní, jejíž cílem je zabránit jaderných zbraních pro mírové využití jaderné energie. Smlouva o úplném zákazu testování (CTBT) byla

Redakce Choice

Rozdíl mezi Bitcoin a Ripple

Klíčový rozdíl: Bitcoin byl první úspěšně implementovaný protokol šifrovacího protokolu typu peer-to-peer. Ripple byl původně systém platebního styku, směnárny a remitencí. Nakonec vybudovala svou síť tak, aby zahrnovala svůj vlastní crypocurrency nazvaný zvlnění. Bitcoin je typ protokolu peer-to-peer kryptocurrency. Crypto-měna je typ digit