java interface abstract class tutorial with examples
Tento videonávod vysvetľuje príklady toho, čo je rozhranie Java, ako ho implementovať, a viacnásobné dedenie pomocou rozhraní v jazyku Java:
V jednom z našich predchádzajúcich tutoriálov sme podrobne diskutovali o abstrakcii. Tam sme diskutovali o abstraktných triedach a abstraktných metódach. Vieme, že abstraktné triedy poskytujú abstrakciu, pretože v abstraktnej triede môžeme mať aj nejakú inú ako abstraktnú metódu.
Funkcia, ktorá poskytuje 100% abstrakciu v Jave, sa nazýva „ Rozhranie “. V tomto návode si povieme rozhrania v Jave.
=> Tu si pozrite príručku Java Beginners Guide.
Čo sa dozviete:
- Videonávody o rozhraniach a abstraktných triedach
- Čo je to rozhranie v prostredí Java
- Viaceré rozhrania v Jave
- Záver
Videonávody o rozhraniach a abstraktných triedach
Úvod do rozhraní a abstraktných tried v Jave - 1. časť:
Prehľad rozhraní a abstraktných tried v Jave - časť 2:
Abstrakcia a dedičstvo v Jave:
Čo je to rozhranie v prostredí Java
Rozhranie v Jave je definované ako abstraktný typ, ktorý určuje správanie triedy. Rozhranie je druh protokolu, ktorý stanovuje pravidlá týkajúce sa toho, ako by sa mala správať konkrétna trieda.
Rozhranie v Jave môže obsahovať abstraktné metódy a statické konštanty. V predvolenom nastavení sú všetky metódy v rozhraní verejné a abstraktné.
Jednoduchý príklad rozhrania v Jave je uvedený nižšie.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Vyššie uvedený príklad definuje „tvar“ rozhrania, ktoré má statickú premennú a abstraktnú metódu „CalcArea ()“.
Rozhranie je entita, ktorá má ako telo iba abstraktné metódy. Môže v ňom byť aj statické konečné premenné.
Rovnako ako trieda, rozhranie môže mať aj metódy a premenné, ale všimnite si, že metódy sú abstraktné (bez implementácie) a premenné sú statické.
Nižšie sú uvedené niektoré vlastnosti, ktoré by ste mali mať na pamäti v súvislosti s rozhraniami:
- Rozhrania sú plány pre triedu. Pomocou svojich metód povedia triede, čo majú robiť.
- Rozhranie určuje abstraktné metódy a triedy implementujúce toto rozhranie by mali tieto metódy tiež implementovať.
- Ak trieda implementujúca rozhranie nedefinuje všetky metódy rozhrania, potom sa z tejto triedy stane abstraktná trieda.
Všeobecná syntax deklarácie rozhrania je uvedená nižšie.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Ako je uvedené vo vyššie uvedenej deklarácii, používame kľúčové slovo Java „interface“, ktoré naznačuje, že teraz deklarujeme rozhranie.
previesť viac videí z youtube na mp3
Za kľúčovým slovom „interface“ nasleduje názov interface_name a potom úvodné zložené zátvorky. Potom máme rôzne deklarácie abstraktných metód, deklaráciu statických polí atď. Nakoniec zavrieme zložené zátvorky.
Napríklad,ak chceme deklarovať rozhranie „TestInterface“ s dvoma metódami, tj. method_one a method_two, potom bude deklarácia TestInterface nasledovná:
interface TestInterface{ void method_one(); void method_two(); }
Použitie rozhrania v Jave
- Rozhrania v Jave poskytujú 100% abstrakciu, pretože môžu mať iba abstraktné metódy.
- Pomocou rozhraní môžeme v Jave dosiahnuť viac dedičstiev, čo pri použití tried nie je možné.
- Na dosiahnutie uvoľneného spojenia je možné použiť rozhranie.
Ako implementovať rozhranie v prostredí Java
Po deklarácii rozhrania ho môžeme používať v triede pomocou kľúčového slova „náradie“ v deklarácii triedy.
Toto kľúčové slovo „implementuje“ sa nachádza za názvom triedy, ako je uvedené nižšie:
class implements { //class body }
Implementácia rozhrania je to isté ako podpísanie zmluvy. Trieda implementujúca rozhranie teda znamená, že podpísala zmluvu a súhlasila s implementáciou abstraktných metód rozhrania alebo inými slovami s chovaním uvedeným v rozhraní.
Ak trieda implementujúca rozhranie neimplementuje presné správanie špecifikované v rozhraní, musí byť trieda deklarovaná ako abstraktná.
Príklad implementácie rozhrania
Ďalej je uvedený jednoduchý príklad rozhrania v Jave.
//interface declaration interface Polygon_Shape { void calculateArea(int length, int breadth); } //implement the interface class Rectangle implements Polygon_Shape { //implement the interface method public void calculateArea(int length, int breadth) { System.out.println('The area of the rectangle is ' + (length * breadth)); } } class Main { public static void main(String() args) { Rectangle rect = new Rectangle(); //declare a class object rect.calculateArea(10, 20); //call the method } }
Výkon:
Vyššie uvedený program demonštruje jednoduchý príklad rozhraní v Jave. Tu deklarujeme rozhranie s názvom Polygon_Shape a potom ho implementuje trieda Obdĺžnik.
Konvencia pomenovania rozhraní v Jave
Konvencie pomenovania Java sú pokyny pre pomenovanie, ktoré musíme dodržiavať ako programátori, aby sme mohli vytvoriť čitateľný konzistentný kód. Java používa pre pomenovacie triedy a rozhrania notácie „TitleCase“. Používa notácie „CamelCase“ pre premenné, metódy atď.
Pokiaľ ide o rozhranie, jeho názov je v nadpise a prvé písmeno každého slova v názve rozhrania je veľké. Názvy rozhraní sa vyberajú tak, aby zvyčajne išlo o prídavné mená. Ale keď rozhrania predstavujú rodinu tried ako mapa alebo zoznam, potom ich možno pomenovať podľa podstatných mien.
Niektoré príklady platných názvov rozhraní sú uvedené nižšie:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Konštruktor rozhrania
Ďalšou otázkou je, či má rozhranie konštruktor?
Vieme, že na vyvolanie metód potrebujeme objekty. Na vytváranie objektov potrebujeme konštruktory. Ale v prípade rozhraní v Jave nie sú metódy implementované.
Metódy rozhraní sú abstraktné. Preto nie je potrebné volať tieto metódy z rozhrania. Po druhé, keďže rozhrania sú predvolene abstraktné, nemôžeme vytvárať objekty rozhrania. Nepotrebujeme teda konštruktory pre rozhranie.
Metódy rozhrania
V tejto časti budeme diskutovať o tom, ako deklarovať metódy rozhrania. Rozhranie môže mať spravidla iba verejné metódy alebo sú predvolene verejné. Vo vnútri rozhrania sa nesmie používať žiadny iný modifikátor prístupu.
Či už to teda výslovne deklarujeme alebo nie, každá metóda v rozhraní je štandardne abstraktná s verejnou viditeľnosťou.
Ak je teda void printMethod () prototypom, ktorý chceme deklarovať v rozhraní, potom sú nasledujúce vyhlásenia rovnaké.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Upozorňujeme, že nemôžeme použiť nasledujúce modifikátory vo vnútri rozhrania pre metódy rozhrania.
- finálny, konečný
- statický
- Súkromné
- chránené
- synchronizované
- domorodec
- strictfp
Teraz implementujme program Java na demonštráciu viditeľnosti metódy rozhrania.
//declare an interface interface TestInterface { void printMethod(); //default visibility is public. } //interface implementation class TestClass implements TestInterface { //if the access modifier is changed to any other, compiler generates error public void printMethod() { System.out.println('TestClass::printMethod()'); } } class Main { public static void main(String() args) { TestClass tc = new TestClass(); //create an object tc.printMethod(); //call concrete method } }
Výkon:
Ako už bolo spomenuté, v predvolenom nastavení sú metódy rozhrania verejné. Ak teda pre metódu rozhrania nešpecifikujeme žiadny modifikátor prístupu, potom je verejný ako vo vyššie uvedenom programe.
Predpokladajme, že zmeníme deklaráciu metódy rozhrania vo vyššie uvedenom programe takto:
private void printMethod ();
Potom to znamená, že sme zadali metódu rozhrania printMethod () ako súkromnú. Keď zostavujeme program, dostaneme nasledujúcu chybu kompilátora.
chyba: modifikátor súkromný tu nie je povolený
private void printMethod ();
Druhý prípad, ktorý môžeme otestovať, je zmena modifikátora implementovanej metódy v triede TestClass z verejného na súkromný. Teraz je predvolený modifikátor v triede súkromný. Takže sme jednoducho odstránili verejné kľúčové slovo z prototypu metódy v triede takto:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Teraz, keď program zostavíme, dostaneme nasledujúcu chybu.
chyba: printMethod () v TestClass nemôže implementovať printMethod () v TestInterface
void printMethod ()
^
pokus o pridelenie slabších prístupových oprávnení; bol verejný
Tu je preto potrebné poznamenať, že nemôžeme zmeniť modifikátor prístupu implementovanej metódy rozhrania na žiadny iný modifikátor prístupu. Pretože sú metódy rozhrania štandardne verejné, pri implementácii triedami, ktoré implementujú rozhrania, by tieto metódy mali byť tiež verejné.
Polia rozhrania v Jave
Polia alebo premenné deklarované v rozhraní sú predvolene verejné, statické a konečné. To znamená, že po deklarácii nie je možné ich hodnotu zmeniť.
Upozorňujeme, že ak sú polia rozhrania definované bez uvedenia niektorého z týchto modifikátorov, kompilátory Java tieto modifikátory predpokladajú. Napríklad, ak pri deklarovaní poľa v rozhraní neurčíme verejný modifikátor, predpokladá sa štandardne.
Keď je rozhranie implementované triedou, poskytuje implementáciu pre všetky abstraktné metódy rozhrania. Podobne všetky polia deklarované v rozhraní zdedí aj trieda, ktorá rozhranie implementuje. V implementačnej triede je teda kópia poľa rozhrania.
Teraz sú všetky polia v rozhraní predvolene statické. Preto k nim môžeme pristupovať pomocou priameho názvu rozhrania, rovnako ako k statickým poliam triedy pristupujeme pomocou názvu triedy a nie objektu.
Nasledujúci príklad programu Java ukazuje, ako môžeme pristupovať k poliam rozhrania.
//interface declaration interface TestInterface{ public static int value = 100; //interface field public void display(); } //Interface implementation class TestClass implements TestInterface{ public static int value = 5000; //class fields public void display() { System.out.println('TestClass::display () method'); } public void show() { System.out.println('TestClass::show () method'); } } public class Main{ public static void main(String args()) { TestClass testObj = new TestClass(); //print interface and class field values. System.out.println('Value of the interface variable (value): '+TestInterface.value); System.out.println('Value of the class variable (value): '+testObj.value); } }
Výkon:
Ako je znázornené v programe vyššie, k poliam rozhrania je možné pristupovať pomocou názvu rozhrania, za ktorým nasleduje bodkový operátor (.) A potom samotný názov premennej alebo poľa.
Generické rozhranie v Jave
O generických jazykoch Java sme hovorili v našich predchádzajúcich tutoriáloch. Okrem toho, že máme všeobecné triedy, metódy atď., Môžeme mať aj všeobecné rozhrania. Generické rozhrania je možné určiť podobne, ako určujeme všeobecné triedy.
Generické rozhrania sú deklarované s parametrami typu, vďaka ktorým sú nezávislé od dátového typu.
Všeobecná syntax všeobecného rozhrania je nasledovná:
informatica powercenter rozhovor otázky a odpovede
interface { //interface methods and variables }
Ak teraz chceme v triede použiť vyššie uvedené všeobecné rozhranie, potom môžeme mať definícia triedy, ako je uvedené nižšie:
class implements interface_name { //class body }
Upozorňujeme, že musíme pre triedu určiť rovnaký zoznam parametrov ako pre rozhranie.
Nasledujúci program Java demonštruje všeobecné rozhrania v jazyku Java.
//generic interface declaration interface MinInterface>{ T minValue(); } //implementation for generic interface class MinClassImpl> implements MinInterface { T() intArray; MinClassImpl(T() o) { intArray = o; } public T minValue() { T v = intArray(0); for (int i = 1; i intMinValue = new MinClassImpl (intArray); MinClassImpl charMinValue = new MinClassImpl(charArray); //call interface method minValue for int type array System.out.println('Min value in intOfArray: ' + intMinValue.minValue()); //call interface method minValue for char type array System.out.println('Min value in charOfArray: ' + charMinValue.minValue()); }
Výkon:
Vyššie uvedený program implementuje rozhranie obsahujúce metódu na vyhľadanie minimálnej hodnoty v poli. Toto je všeobecné rozhranie. Trieda implementuje toto rozhranie a prepíše metódu. V hlavnej metóde voláme metódu rozhrania na nájdenie minimálnej hodnoty v celom čísle a v poli znakov.
Viaceré rozhrania v Jave
V našej téme dedenia sme videli, že Java neumožňuje triede dediť z viacerých tried, pretože vedie k nejednoznačnosti nazývanej „Diamond Problem“.
Trieda však môže zdediť alebo implementovať viac ako jedno rozhranie. V tomto prípade sa to nazýva viacnásobné dedičstvo. Aj keď teda nemáme povolené implementovať viacnásobné dedičstvo v Jave prostredníctvom tried, môžeme to urobiť pomocou rozhraní.
Nasledujúci diagram zobrazuje viacnásobné dedenie pomocou rozhraní. Trieda tu implementuje dve rozhrania, tj. Interface_one a Interface_two.
Všimnite si, že keď trieda implementuje viac rozhraní, názvy rozhraní sú v deklarácii triedy oddelené čiarkami. Môžeme implementovať toľko rozhraní, pokiaľ dokážeme zvládnuť zložitosť.
Program Java, ktorý demonštruje viac rozhraní, je zobrazený nižšie.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration interface Interface_Two{ void show(); } //multiple inheritance - DemoClass implementing Interface_One&Interface_Two class DemoClass implements Interface_One,Interface_Two{ public void print(){ //Override Interface_One print() System.out.println('Democlass::Interface_One_Print ()'); } public void show(){ //Override Interface_Two show() System.out.println('DemoClass::Interface_Two_Show ()'); } } public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Výkon:
c ++ a java rozdiely
Ako je uvedené vyššie, implementujeme dve rozhrania. Potom prepíšeme ich príslušné metódy a zavoláme ich hlavnou metódou.
Viacnásobné dedičstvo v Jave poskytuje všetky výhody, ktoré viacnásobné dedičstvo poskytuje v C ++. Ale na rozdiel od viacnásobného dedenia pomocou tried je viacnásobné dedenie pomocou rozhraní bez akýchkoľvek nejasností.
Dedičnosť rozhrania v Jave: Rozhranie rozširuje rozhranie
Keď trieda implementuje rozhranie, robí sa to pomocou ‘ náradie ‘Kľúčové slovo. V prostredí Java môže rozhranie zdediť iné rozhranie. To sa deje pomocou predlžuje ‘Kľúčové slovo. Keď rozhranie rozširuje ďalšie rozhranie, nazýva sa „ Dedičnosť rozhrania ”V Jave.
Program Java na implementáciu dedičnosti rozhrania je uvedený nižšie.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration; inherits from Interface_One interface Interface_Two extends Interface_One{ void show(); } //multiple inheritance - DemoClass implementing Interface_Two class DemoClass implements Interface_Two{ public void print(){ //Override Interface_Two print() System.out.println('Democlass public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Výkon:
Rovnaký program, ktorý sme použili na viacnásobné dedenie, sme upravili pomocou rozhraní, aby sme demonštrovali dedičnosť rozhrania. Tu rozšírime Interface_one v Interface_two a potom začneme implementovať Interface_two v triede. Pretože rozhrania sa dedia, sú k dispozícii obidve metódy na prepísanie.
často kladené otázky
Otázka č. 1) Aké je použitie rozhrania v Jave?
Odpoveď: Rozhranie v Jave je entita, ktorá sa používa na dosiahnutie 100% abstrakcie. Môže obsahovať iba abstraktné metódy, ktoré môže prepísať trieda implementujúca rozhranie.
Rozhranie svojím spôsobom funguje ako návrh triedy, pričom poskytuje triede prototypy abstraktných metód a statické konštanty a potom musí trieda tieto metódy prepísať implementáciou rozhrania.
Otázka 2) Aké sú výhody rozhrania v Jave?
Odpoveď: Medzi výhody rozhrania patria:
- Rozhranie funguje ako návrh triedy.
- Rozhranie poskytuje 100% abstrakciu v Jave, pretože má všetky abstraktné metódy.
- Na dosiahnutie viacnásobného dedičstva v Jave je možné použiť rozhrania. Java neumožňuje dediť z viac ako jednej triedy, ale trieda môže implementovať viac rozhraní.
# 3) Môže rozhranie obsahovať metódy?
Odpoveď: Rozhrania môžu mať prototypy metód a statické a konečné konštanty. Ale počnúc jazykom Java 8 môžu rozhrania obsahovať statické a predvolené metódy.
Otázka č. 4) Môžeme rozhranie vyhlásiť za konečné?
Odpoveď: Nie. Ak rozhranie vyhlásime za konečné, trieda ho nebude môcť implementovať. Bez implementácie v akejkoľvek triede nebude rozhranie slúžiť žiadnym účelom.
Viac informácií o rozhraniach
Rozhrania sú plány ako trieda, ale bude mať iba deklaráciu metódy. Nebude mať žiadny spôsob implementácie. Všetky metódy v rozhraní sú predvolene verejné. Rozhranie Java 1.8 môže mať statické a predvolené metódy.
Rozhrania sa používajú hlavne v API.
Napríklad: Zvážte, že navrhujete motor vozidla.
Keď skončíte s hardvérovou časťou, chcete, aby niektoré softvérové funkcie implementoval klient, ktorý používa váš engine. V takom prípade teda môžete definovať svoje funkcie motora v rozhraní.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Pravidlá, ktoré sa majú dodržiavať pre rozhranie
- Trieda, ktorá implementuje rozhranie, by mala implementovať všetky metódy v rozhraní.
- Rozhranie môže obsahovať konečné premenné.
public class Vehicle implements Engine { int speed; int gear; @Override public void speedUp(int a) { this.speed=a; System.out.println('speed'+speed); } @Override public void changeGear(int a) { this.gear=a; System.out.println('gear'+gear); } public static void main(String() args) { // TODO Auto-generated method stub Vehicle objv=new Vehicle(); objv.changeGear(3); objv.speedUp(70); } }
Trieda vozidla je tu podtriedou, ktorá implementuje rozhranie motora.
Čo sú to abstraktné triedy?
Abstraktná trieda je ako trieda, ale bude obsahovať abstraktné metódy a konkrétne metódy. Abstraktné metódy nemajú implementáciu. Bude mať iba deklaráciu metódy.
Pravidlá, ktoré treba dodržiavať pre abstraktnú triedu
- Triedu abstraktu nemožno vytvoriť.
- Podradená trieda, ktorá rozširuje abstraktnú triedu, by mala implementovať všetky abstraktné metódy nadradenej triedy alebo podradenej triedy by mala byť deklarovaná ako abstraktná trieda.
Ak chcete navrhnúť čiastočnú implementáciu, môžete ísť na abstraktnú triedu.
Príklad abstraktného triedneho programu:
EmployeeDetails.java
public abstract class EmployeeDetails { private String name; private int emp_ID; public void commonEmpDetaills() { System.out.println('Name'+name); System.out.println('emp_ID'+emp_ID); } public abstract void confidentialDetails(int s,String p); }
Trieda, ktorá rozšíri abstraktnú triedu.
HR.java
public class HR extends EmployeeDetails { private int salary; private String performance; @Override public void confidentialDetails(int s,String p) { this.salary=s; this.performance=p; System.out.println('salary=='+salary); System.out.println('performance=='+performance); } public static void main(String() args) { HR hr =new HR(); hr.confidentialDetails(5000,'good'); } }
Kľúčové body, ktoré je potrebné poznamenať:
- V rozhraniach nebudú mať všetky metódy implementáciu metód.
- Trieda, ktorá implementuje rozhranie, by mala implementovať všetky metódy v danom rozhraní.
- Abstraktné triedy môžu mať abstraktné aj bežné konkrétne metódy. Abstraktné metódy nemajú implementáciu.
- Trieda, ktorá rozširuje abstraktnú triedu, by mala mať implementáciu pre všetky abstraktné metódy v abstraktnej triede.
- Ak podtrieda nemá dostatok informácií na implementáciu abstraktných metód, mala by sa podtrieda deklarovať ako abstraktná trieda.
Záver
V tomto tutoriáli sme predstavili základné koncepty rozhraní v Jave. Diskutovali sme o definícii rozhrania spolu s potrebou rozhraní. Preskúmali sme ich základnú syntax a definíciu. Potom sme diskutovali o tom, ako používať rozhrania, pre ktoré používame kľúčové slovo „implementuje“.
Naučili sme sa, ako používať viac rozhraní a dediť rozhranie v Jave. Pomocou viacerých rozhraní môžeme v Jave implementovať viacnásobné dedičstvo. Dedičnosť rozhrania je, keď jedno rozhranie rozširuje ďalšie rozhranie.
=> Navštívte tu a pozrite si sériu školení Java pre všetkých
Odporúčané čítanie
- OOP Java: Úvod do objektovo orientovaného programovania v Jave
- Porovnateľné a porovnávacie rozhrania v Jave
- Vylepšenia rozhrania v prostredí Java 8 - Funkčné rozhranie Java
- Výukový program pre mapové rozhranie Java s implementáciou a príkladmi
- Rozhranie ListIterator v Jave s príkladmi
- Rozhranie značiek v Jave: Serializovateľné a klonovateľné
- Nastaviť rozhranie v prostredí Java: Výukový program sady Java s príkladmi
- Výukový program Java Reflection s príkladmi