java interface abstract class tutorial with examples
Ta video vadnica razloži, kaj je vmesnik Java, kako ga uporabiti in večkratno dedovanje z vmesniki v javi s primeri:
V enem od naših prejšnjih vadnic smo podrobno razpravljali o abstrakciji. Tam smo razpravljali o abstraktnih tečajih in abstraktnih metodah. Vemo, da abstraktni razredi ponujajo abstrakcijo, saj imamo lahko tudi abstraktne metode v abstraktnem razredu.
Funkcija, ki zagotavlja 100% abstrakcijo v Javi, se imenuje » Vmesnik '. V tej vadnici bomo razpravljali vmesniki v Javi.
=> Tukaj si oglejte Vodnik za začetnike Java.
Kaj se boste naučili:
Video vaje o vmesnikih in abstraktnih razredih
Uvod v vmesnike in razrede abstraktov v Javi - 1. del:
Pregled vmesnikov in abstraktnih razredov v Javi - 2. del:
Abstrakcija in dedovanje v Javi:
Kaj je vmesnik v Javi
Vmesnik v Javi je definiran kot abstraktni tip, ki določa vedenje razreda. Vmesnik je neke vrste protokol, ki določa pravila, kako naj se določen razred obnaša.
Vmesnik v Javi lahko vsebuje abstraktne metode in statične konstante. Privzeto so vse metode v vmesniku javne in abstraktne.
Preprost primer vmesnika v Javi je podan spodaj.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Zgornji primer opredeljuje 'obliko' vmesnika, ki ima statično spremenljivko, in abstraktno metodo 'izračunaj površino ()'.
Vmesnik je entiteta, ki ima za telo samo abstraktne metode. V sebi ima lahko tudi statične končne spremenljivke.
Tako kot razred ima lahko tudi vmesnik metode in spremenljivke, vendar upoštevajte, da so metode abstraktne (brez izvedbe) in spremenljivke statične.
Spodaj je navedenih nekaj lastnosti, ki jih je treba upoštevati v zvezi z vmesniki:
- Vmesniki so načrti za razred. Učencem po njihovih metodah povedo, kaj naj storijo.
- Vmesnik določa abstraktne metode in razredi, ki izvajajo ta vmesnik, morajo te metode tudi izvajati.
- Če razred, ki izvaja vmesnik, ne opredeli vseh metod vmesnika, potem ta razred postane abstraktni razred.
Splošna sintaksa deklaracije vmesnika je podana spodaj.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Kot je prikazano v zgornji izjavi, uporabljamo ključno besedo Java 'vmesnik', kar pomeni, da vmesnik prijavljamo zdaj.
spletna mesta za prenos videoposnetkov z youtuba
Ključni besedi 'vmesnik' sledi ime_vmesnika in nato uvodne zavite oklepaje. Nato imamo različne izjave abstraktnih metod, izjavo statičnih polj itd. Na koncu zapremo zavite oklepaje.
Na primer,če želimo razglasiti vmesnik 'TestInterface' z dvema metodama v njem, tj. method_one in method_two, bo izjava TestInterface naslednja:
interface TestInterface{ void method_one(); void method_two(); }
Uporaba vmesnika v Javi
- Vmesniki v Javi zagotavljajo 100% abstrakcijo, saj imajo lahko samo abstraktne metode.
- Z uporabo vmesnikov lahko v Javi dosežemo več dedovanja, kar z razredi ni mogoče.
- Za ohlapno spenjanje lahko uporabimo vmesnik.
Kako uporabiti vmesnik v Javi
Ko je vmesnik razglašen, ga lahko uporabimo v razredu z uporabo ključne besede 'implementira' v izjavi razreda.
Ta ključna beseda ‘implements’ se prikaže za imenom razreda, kot je prikazano spodaj:
class implements { //class body }
Izvajanje vmesnika je enako kot podpis pogodbe. Torej razred, ki izvaja vmesnik, pomeni, da je podpisal pogodbo in se strinjal z izvajanjem abstraktnih metod vmesnika ali z drugimi besedami, da izvaja vedenje, ki ga določa vmesnik.
Če razred, ki izvaja vmesnik, ne izvaja natančnega vedenja, navedenega v vmesniku, je treba razred razglasiti za abstraktnega.
Primer izvedbe vmesnika
Spodaj je prikazan preprost primer vmesnika v Javi.
//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 } }
Izhod:
Zgornji program prikazuje preprost primer vmesnikov v Javi. Tu razglasimo vmesnik z imenom Polygon_Shape in ga nato razred Rectangle implementira.
Konvencija o poimenovanju vmesnikov v Javi
Konvencije o poimenovanju Java so smernice za poimenovanje, ki jih moramo upoštevati kot programerji, da lahko izdelamo berljivo skladno kodo. Java uporablja zapise “TitleCase” za razrede poimenovanja in vmesnike. Uporablja zapise CamelCase za spremenljivke, metode itd.
Kar zadeva vmesnik, je ime vmesnika v naslovu s prvo črko vsake besede imena vmesnika z veliko začetnico. Imena vmesnikov so izbrana tako, da so običajno pridevniki. Ko pa vmesniki predstavljajo družino razredov, kot so zemljevid ali seznam, jih lahko poimenujemo po samostalnikih.
Nekaj primerov veljavnih imen vmesnikov je navedenih spodaj:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Konstruktor vmesnika
Naslednje vprašanje je, ali ima vmesnik konstruktor?
Vemo, da za priklic metod potrebujemo predmete. Za ustvarjanje predmetov potrebujemo konstruktorje. Toda v primeru vmesnikov v Javi metode niso implementirane.
Vse metode vmesnikov so abstraktne. Zato teh načinov ni uporabno priklicati iz vmesnika. Drugič, ker so vmesniki privzeto abstraktni, predmetov vmesnika ne moremo ustvariti. Tako ne potrebujemo konstruktorjev za Interface.
Vmesniške metode
V tem poglavju bomo razpravljali o tem, kako prijaviti vmesniške metode. Praviloma ima lahko vmesnik samo javne metode ali pa so privzeto metode vmesnika javne. V vmesniku ni dovoljeno uporabljati nobenega drugega modifikatorja dostopa.
Ne glede na to, ali to izrecno razglasimo ali ne, je vsaka metoda v vmesniku privzeto abstraktna in javno vidna.
Če je torej void printMethod () prototip, ki ga nameravamo prijaviti v vmesniku, so naslednje izjave enake.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Upoštevajte, da za vmesniške metode znotraj vmesnika ne moremo uporabiti naslednjih modifikatorjev.
- dokončno
- statično
- Zasebno
- zaščiten
- sinhronizirano
- domač
- strogafp
Zdaj pa izvedimo program Java za prikaz vidnosti metode vmesnika.
//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 } }
Izhod:
Kot smo že omenili, so metode vmesnika privzeto javne. Ko torej za vmesniško metodo ne določimo nobenega modifikatorja dostopa, je ta javen kot v zgornjem programu.
Recimo, da spremenimo izjavo metode vmesnika v zgornjem programu, kot sledi:
private void printMethod ();
Potem to pomeni, da smo vmesniško metodo printMethod () določili kot zasebno. Ko prevedemo program, dobimo naslednjo napako prevajalnika.
napaka: zasebni modifikator tukaj ni dovoljen
private void printMethod ();
Drugi primer, ki ga lahko preizkusimo, je s spreminjanjem modifikatorja implementirane metode v razredu TestClass iz javnega v zasebnega. Zdaj je privzeti modifikator v razredu zaseben. Torej samo odstranimo javno ključno besedo iz prototipa metode v razredu, kot sledi:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Če zberemo program, dobimo naslednjo napako.
napaka: printMethod () v TestClass ne more implementirati printMethod () v TestInterface
void printMethod ()
^
poskus dodelitve šibkejših pravic dostopa; je bila javna
Zato je tukaj treba opozoriti na to, da modifikatorja dostopa izvedene metode vmesnika ne moremo spremeniti v noben drug modifikator dostopa. Ker so metode vmesnikov privzeto javne, ko jih izvajajo razredi, ki izvajajo vmesnike, bi morale biti te metode tudi javne.
Vmesniška polja v Javi
Polja ali spremenljivke, deklarirane v vmesniku, so privzeto javne, statične in končne. To pomeni, da enkrat prijavljene vrednosti ni mogoče spremeniti.
Upoštevajte, da če so vmesniška polja definirana brez navedbe katerega koli od teh modifikatorjev, potem prevajalniki Java prevzamejo te modifikatorje. Na primer, če pri deklariranju polja v vmesniku ne določimo javnega modifikatorja, potem je privzeto predpostavljen.
Ko vmesnik implementira razred, potem nudi izvedbo za vse abstraktne metode vmesnika. Podobno vsa polja, deklarirana v vmesniku, podeduje tudi razred, ki izvaja vmesnik. Tako je kopija polja vmesnika prisotna v izvedbenem razredu.
Zdaj so vsa polja v vmesniku privzeto statična. Do njih lahko torej dostopamo tako, da uporabimo ime vmesnika neposredno kot enako kot do statičnih polj razreda z imenom razreda in ne predmeta.
Spodnji primer programa Java prikazuje, kako lahko dostopamo do vmesniških polj.
//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); } }
Izhod:
Kot je prikazano v zgornjem programu, je do vmesniških polj mogoče dostopati z imenom vmesnika, ki mu sledi operator pike (.) In nato dejansko ime spremenljivke ali polja.
Splošni vmesnik v Javi
V prejšnjih vajah smo razpravljali o generičnih izdelkih Java. Poleg splošnih razredov, metod itd. Imamo lahko tudi generične vmesnike. Splošne vmesnike lahko določimo podobno na način, na katerega določimo generične razrede.
Splošni vmesniki so deklarirani s parametri tipa, zaradi česar so neodvisni od podatkovnega tipa.
Splošna sintaksa generičnega vmesnika je naslednja:
Vprašanja in odgovori za namizne podpore za p2
interface { //interface methods and variables }
Zdaj, če želimo v razredu uporabiti zgornji generični vmesnik, potem lahko opredelitev razreda, kot je prikazano spodaj:
class implements interface_name { //class body }
Upoštevajte, da moramo pri razredu določiti enak seznam parametrov kot pri vmesniku.
Naslednji program Java prikazuje splošne vmesnike v Javi.
//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()); }
Izhod:
Zgornji program izvaja vmesnik, ki vsebuje metodo za iskanje najmanjše vrednosti v matriki. To je splošni vmesnik. Razred izvaja ta vmesnik in preglasi metodo. V glavni metodi pokličemo metodo vmesnika, da poiščemo najmanjšo vrednost v celoštevilčnem in znakovnem polju.
Več vmesnikov v Javi
V temi o dedovanju smo videli, da Java ne dovoljuje, da bi razred podedoval več razredov, saj ima za posledico dvoumnost, imenovano 'Diamantni problem'.
Vendar lahko razred podeduje ali implementira več kot en vmesnik. V tem primeru je znano kot večkratno dedovanje. Torej, čeprav v Java ne smemo izvajati večkratnega dedovanja prek razredov, lahko to storimo z vmesniki.
Naslednji diagram prikazuje večkratno dedovanje z uporabo vmesnikov. Tu razred izvaja dva vmesnika, to sta Interface_one in Interface_two.
Ko razred implementira več vmesnikov, so imena vmesnikov v deklaraciji razreda ločena z vejico. Lahko uporabimo toliko vmesnikov, dokler lahko obvladamo zapletenost.
Program Java, ki prikazuje več vmesnikov, je prikazan spodaj.
//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(); } }
Izhod:
kako igrati mkv na pc
Kot je prikazano zgoraj, izvajamo dva vmesnika. Nato preglasimo njihove metode in jih pokličemo v glavni metodi.
Večkratno dedovanje v Javi ponuja vse prednosti, ki jih večkratno dedovanje zagotavlja v C ++. Toda za razliko od večkratnega dedovanja z uporabo razredov je večkratno dedovanje z vmesniki brez dvoumnosti.
Dedovanje vmesnika v Javi: vmesnik razširi vmesnik
Ko razred implementira vmesnik, se to izvede z uporabo izvaja ’Ključna beseda. V Javi lahko vmesnik podeduje drug vmesnik. To se naredi z uporabo podaljša ’Ključna beseda. Ko vmesnik razširi drug vmesnik, se imenuje » Dedovanje vmesnika «V Javi.
Program Java za izvajanje dedovanja vmesnikov je prikazan spodaj.
//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(); } }
Izhod:
Spremenili smo isti program, ki smo ga uporabili za večkratno dedovanje z uporabo vmesnikov za prikaz dedovanja vmesnika. Tu razširimo Interface_one v Interface_two in nato izvedemo Interface_two v razredu. Ker se vmesniki podedujejo, sta obe metodi na voljo za razveljavitev.
Pogosto zastavljena vprašanja
V # 1) Kakšna je uporaba vmesnika v Javi?
Odgovor: Vmesnik v Javi je entiteta, ki se uporablja za 100-odstotno abstrakcijo. Vsebuje lahko samo abstraktne metode, ki jih lahko razred, ki izvaja vmesnik, preglasi.
Vmesnik na nek način deluje kot načrt razreda, kjer razredu nudi abstraktne prototipe metode in statične konstante, nato pa mora razred te metode nadgraditi z izvajanjem vmesnika.
V # 2) Kakšne so prednosti vmesnika v Javi?
Odgovor: Nekatere prednosti vmesnika so naslednje:
- Vmesnik deluje kot načrt razreda.
- Vmesnik zagotavlja 100-odstotno abstrakcijo v Javi, saj ima vse abstraktne metode.
- Vmesnike lahko uporabimo za večkratno dedovanje v Javi. Java ne dovoljuje podedovanja iz več kot enega razreda, vendar lahko razred implementira več vmesnikov.
# 3) Ali lahko vmesnik uporablja metode?
Odgovor: Vmesniki imajo lahko prototipe metod ter statične in končne konstante. Toda od Java 8 lahko vmesniki vsebujejo statične in privzete metode.
V # 4) Ali lahko vmesnik razglasimo za dokončnega?
Odgovor: Ne. Če vmesnik razglasimo za dokončnega, ga razred ne bo mogel implementirati. Brez uporabe katerega koli razreda vmesnik ne bo služil nobenemu namenu.
Več o vmesnikih
Vmesniki so načrti kot razred, vendar bo imel le izjavo metode. Ne bo imel nobene metode izvedbe. Vse metode v vmesniku so privzeto javne abstraktne. Vmesnik Java 1.8 ima lahko statične in privzete metode.
Vmesniki se v glavnem uporabljajo v API-jih.
Na primer: Upoštevajte, da načrtujete motor vozila.
Ko končate s strojnim delom, želite, da nekatere funkcije programske opreme izvaja odjemalec, ki uporablja vaš motor. V tem primeru lahko v vmesniku določite svoje funkcije motorja.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Pravila za vmesnik
- Razred, ki izvaja vmesnik, mora izvajati vse metode v vmesniku.
- Vmesnik lahko vsebuje končne spremenljivke.
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); } }
Tu je razred Vehicle podrazred, ki izvaja vmesnik motorja.
Kaj so abstraktni razredi?
Abstraktni razred je podoben razredu, vendar bo imel abstraktne metode in konkretne metode. Abstraktne metode nimajo izvedbe. Imela bo samo izjavo metode.
Pravila za abstraktni razred
- Abstraktnega razreda ni mogoče ustvariti.
- Podrejeni razred, ki razširja abstraktni razred, mora izvajati vse abstraktne metode nadrejenega razreda ali pa mora biti razred Child razglašen za abstraktni razred.
Ko želite oblikovati delno izvedbo, se lahko odločite za abstraktni tečaj.
Primer abstraktnega predavalnega programa:
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); }
Razred, ki bo podaljšal abstraktni razred.
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'); } }
Ključne točke, ki jih je treba upoštevati:
- V vmesnikih vse metode ne bodo imele izvedbe metode.
- Razred, ki izvaja vmesnik, mora izvajati vse metode v tem vmesniku.
- Abstraktni razredi imajo lahko tako abstraktne metode kot običajne konkretne metode. Abstraktne metode nimajo izvedbe.
- Razred, ki razširja abstraktni razred, bi moral imeti izvedbo za vse abstraktne metode v abstraktnem razredu.
- Če podrazred nima dovolj informacij za izvajanje abstraktnih metod, je treba podrazred prijaviti kot abstraktni razred.
Zaključek
V tej vadnici smo predstavili osnovne koncepte vmesnikov v Javi. Razpravljali smo o definiciji vmesnika in potrebi po vmesnikih. Raziskovali smo njihovo osnovno sintakso in definicijo. Nato smo razpravljali o uporabi vmesnikov, za katere uporabljamo ključno besedo ‘implements’.
Naučili smo se, kako uporabljati več vmesnikov in dedovanje vmesnikov v Javi. Z uporabo več vmesnikov lahko v Java izvedemo večkratno dedovanje. Dedovanje vmesnika je, ko en vmesnik razširi drug vmesnik.
=> Obiščite tukaj, da si ogledate serijo Java Training for All
Priporočeno branje
- OOP Java: Uvod v objektno usmerjeno programiranje v Javi
- Primerljivi in primerjalni vmesniki v Javi
- Izboljšave vmesnika v Javi 8 - funkcijski vmesnik Java
- Vadnica za vmesnik Java Map z implementacijo in primeri
- ListIterator vmesnik v Javi s primeri
- Označevalni vmesnik v Javi: serializiran in dostopen
- Nastavitev vmesnika v Javi: Vadnica za nastavitev Java s primeri
- Vadnica za odsev Java s primeri