Jaký je rozdíl mezi abstraktní třídou a rozhraním v Javě?



Tento článek vám pomůže pochopit klíčový rozdíl mezi abstraktní třídou a rozhraním v Javě pomocí ukázkového programu.

Abstraktní třídy a rozhraní jsou dva hlavní stavební blokyz . Ačkoli se oba primárně používají k abstrakci, jsou navzájem velmi odlišné a nelze je zaměnitelně použít. V tomto článku pojďme zjistit, jaký je rozdíl mezi abstraktní třídou a rozhraním v Javě.

Témata diskutovaná v tomto článku jsou následující:





Pochopit rozdíly mezi abstraktní třídou a rozhraním v , musíte vědět, co je abstraktní třída a co je to rozhraní. Začněme tedy diskusí o tom, co to je.

Co je abstraktní třída v Javě?

V libovolném programovacím jazyce abstrakce znamená skrývání irelevantních detailů od uživatele, aby se soustředil pouze na základní detaily, aby se zvýšila účinnost a tím se snížila složitost. V Javě se abstrakce dosahuje pomocí abstraktní třídy . Abstraktní třída zachycuje společné charakteristiky podtříd a může nebo nemusí obsahovat žádnou abstraktní metodu. Nelze ji vytvořit instanci, ale lze ji použít pouze jako nadtřídu u jejích podtříd. Zde je ukázkový program předvádějící abstraktní třídu:



Poznámka: An abstraktní metoda , je metoda, která není implementována na místě a dodáváneúplnost třída .

balíček MyPackage // abstraktní třída abstraktní třída Zvíře {String AnimalName = '' Zvíře (Název řetězce) {this.AnimalName = name} // deklarovat jiné než abstraktní metody // má výchozí implementaci public void BasicInfo (Podrobnosti řetězce) {Systém. out.println (this.AnimalName + '' + podrobnosti)} // abstraktní metody, které budou // implementovány jejími podtřídami abstraktní veřejné neplatné stanoviště () abstraktní veřejné neplatné dýchání ()} třída Terrestrial extends Animal {// konstruktor Terrestrial (název řetězce) {super (name)} @Override public void habitat () {System.out.println ('leave on land and')} @Override public void respiration () {System.out.println ('respire přes plíce nebo průdušnici. ')}} třída Aquatic rozšiřuje Animal {// konstruktor Aquatic (název řetězce) {super (název)} @Override public void habitat () {System.out.println (' Leave in water and ') } @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Třída AbstractClassDemo {public static voi d main (String [] args) {// vytvoření objektu třídy Terrestrial // a použití odkazu na třídu Animal. Animal object1 = new Terrestrial ('Humans') object1.BasicInfo ('are terrestrial beings, they') object1.habitat () object1.respiration () System.out.println ('') // creating the Objects of circle class Animal object2 = new Aquatic ('Fishes') object2.BasicInfo ('are aqautic beings, they') object2.habitat () object2.respiration ()}}

Výstup

Lidé jsou pozemské bytosti, opouštějí pevninu a dýchají plícemi nebo průdušnicí. Ryby jsou vodnaté bytosti, které opouští ve vodě a dýchají žábry nebo kůží.

The Základní informace () je metoda sdílená uživatelem Pozemní a Vodní třídy. Od té doby Třída zvířat nelze zahájit, vytváříme objekty Pozemní a Vodní třídy pro programovací účely. Dále máme rozhraní.



Rozhraní v Javě

Další způsob, jak toho dosáhnout abstrakce v Javě je pomocí rozhraní .Rozhraní je sbírka abstraktních metod, nemá žádné konkrétní , na rozdíl od abstraktní třídy. Ale na rozdíl od abstraktní třídy poskytuje rozhraní v Javě úplnou abstrakci. Může mít jak metody, tak proměnné jako třída. Metody deklarované v rozhraní jsou však ve výchozím nastavení abstraktní.Tady je předvádění abstraktní třídy:

balíček Rozhraní MyPackage Zvířata {// abstraktní metody void habitat () void respirace ()} třída TerrestrialA implementuje Animals {String AnimalName = '' // konstruktor TerrestrialA (název řetězce) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave on land and')} @Override public void respiration () {System.out.println ('respire through lungs or trachea.')}} Třída AquaticA implementuje Animals {String AnimalName = '' // konstruktor AquaticA (název řetězce) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override public void respirace () {System.out.println ('dýchejte skrz žábry nebo jejich kůži.')}} Třída JavaInterfaceDemo {public static void main (String [] args) {// vytvoření objektu třídy Terrestrial // a použití odkazu na třídu Animal . Zvířata object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // create the Objects of circle class Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Výstup

Lidé odcházejí na pevninu a dýchají plícemi nebo průdušnicí. Ryby odcházejí ve vodě a dýchají žábry nebo kůží.

Pokud mezi sebou nemáte žádný společný kód třídy , pak můžete přejít na rozhraní. Rozhraní je spíš jako plán třídy, protože nemá žádné jiné než abstraktní metody.

Z výše uvedeného obsahu jste si možná všimli klíčového rozdílu mezi abstraktní třídou a rozhraním . Což je na rozdíl od abstraktní třídy rozhraní plné abstrakce v Javě. Pojďme nyní a vyjmenujme další rozdíly.

Výukový program pro design uživatelského rozhraní Android Studio

Abstraktní třída vs rozhraní

V tabulce níže jsou uvedeny klíčové rozdíly mezi abstraktní třídou a rozhraním.

Parametr Abstraktní třída Rozhraní

Výchozí implementace metody

Může mít výchozí implementaci metody

Rozhraní poskytují čistou abstrakci a vůbec nemohou mít implementaci

Proměnné

Může obsahovat nekoncové proměnné.

Proměnné deklarované v rozhraní jsou ve výchozím nastavení konečné

Použité klíčové slovo

Abstraktní třídu lze rozšířit pomocí klíčového slova „extends

Rozhraní by mělo být implementováno pomocí klíčových slov ïmplements

Modifikátory přístupu

Umětmít veřejný, chráněný, soukromý a výchozí modifikátor

Metody rozhraní jsou ve výchozím nastavení veřejné. s ním nemůžete použít žádný jiný modifikátor přístupu

jak používat podřetězec v Javě

Rychlost implementace

Je rychlejší než rozhraní

Rozhraní je poněkud pomalejší a vyžaduje další směrování

Normální třída

Může rozšířit pouze jednu abstraktní třídu

Může implementovat více rozhraní

Konstruktéři

Abstraktní třída může mít konstruktory

Rozhraní nemůže mít konstruktory

Vícenásobné dědictví

Abstraktní třída může rozšířit další třídu a může implementovat více rozhraní Java

Rozhraní může rozšířit pouze další rozhraní Java

Nyní máte klíčové rozdíly mezi abstraktní třídou a rozhraním v Javě. Jak se ale rozhodnout, kdy použít který z těchto dvou?

Kdy použít abstraktní třídu a kdy použít rozhraní?

Zvažte použití abstraktních tříd v následujících případech:

  • Pokud máte nějaké související třídy, které je třeba sdílet stejné řádky kódu
  • Pokud chcete definovat nestatické nebo nekoncové pole
  • Když tam jsoumetody nebo polenebo vyžadovat modifikátory přístupu jiné než veřejné (například chráněné a soukromé)

Zvažte použití rozhraní v následujících případech:

  • Když chcete dosáhnout čistá abstrakce
  • Pokud chcete zaměstnat násobek , tj,implementovat více než jedno rozhraní
  • Pokud chcete určit chování konkrétního datového typu, ale nemáte obavy z toho, kdo implementuje jeho chování.

Tím se dostáváme na konec tohoto článku. Pokryl jsem jednu z nejčastěji kladených otázek Java v Interview, což je rozdíl mezi abstraktní třídou a rozhraním v Javě.

Ujistěte se, že cvičíte co nejvíce a vraťte své zkušenosti.

Podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Jsme tu, abychom vám pomohli s každým krokem na vaší cestě, abychom se kromě otázek týkajících se tohoto rozhovoru pro javu stali i učebním plánem, který je určen pro studenty a profesionály, kteří chtějí být vývojářem Java.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto „rozhraní Java Map“ článku a my se vám ozveme co nejdříve.