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í:
- Co je abstraktní třída v Javě?
- Rozhraní v Javě
- Abstraktní třída vs rozhraní
- Kdy použít abstraktní třídu a kdy použít rozhraní?
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.