java interface abstract class tutorial with examples
Ovaj video tutorial objašnjava što je Java sučelje, kako ga implementirati i višestruko nasljeđivanje pomoću sučelja u Javi s primjerima:
U jednom od naših ranijih vodiča detaljno smo raspravljali o apstrakciji. Tamo smo razgovarali o apstraktnoj nastavi i apstraktnim metodama. Znamo da apstraktne klase pružaju apstrakciju, jer u apstraktnoj klasi možemo imati i neke apstraktne metode.
Značajka koja omogućuje 100% apstrakciju na Javi naziva se „ Sučelje '. U ovom uputstvu ćemo razgovarati sučelja u Javi.
=> Ovdje pogledajte Vodič za početnike za Java.
Što ćete naučiti:
- Video tutorijali o sučeljima i apstraktnim klasama
- Što je sučelje u Javi
- Više sučelja u Javi
- Zaključak
Video tutorijali o sučeljima i apstraktnim klasama
Uvod u sučelja i klase sažetka u Javi - 1. dio:
Pregled sučelja i klasa sažetaka u Javi - 2. dio:
Apstrakcija i nasljeđivanje u Javi:
Što je sučelje u Javi
Sučelje u Javi definirano je kao apstraktni tip koji određuje ponašanje klase. Sučelje je vrsta protokola koji postavlja pravila o tome kako se određena klasa treba ponašati.
Sučelje u Javi može sadržavati apstraktne metode i statičke konstante. Prema zadanim postavkama sve su metode u sučelju javne i apstraktne.
Jednostavan primjer sučelja u Javi dan je u nastavku.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Gornji primjer definira 'oblik' sučelja koji ima statičku varijablu i apstraktnu metodu 'izračunaj površinu ()'.
Sučelje je entitet koji kao tijelo ima samo apstraktne metode. U sebi također može imati statičke završne varijable.
Dakle, baš kao i klasa, sučelje također može imati metode i varijable, ali imajte na umu da su metode apstraktne (bez implementacije), a varijable statične.
U nastavku su navedena neka svojstva koja treba imati na umu u vezi sa sučeljima:
- Sučelja su nacrti klase. Oni svojim razredima govore razredu što treba učiniti.
- Sučelje specificira apstraktne metode i klase koje implementiraju to sučelje trebaju također implementirati te metode.
- Ako klasa koja implementira sučelje ne definira sve metode sučelja, tada ta klasa postaje apstraktna klasa.
Općenita sintaksa deklaracije sučelja dana je u nastavku.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Kao što je prikazano u gornjoj deklaraciji, koristimo Java ključnu riječ 'sučelje' što ukazuje da sada deklariramo sučelje.
c ++ nizovi u funkcijama
Ključnu riječ ‘sučelje’ slijedi naziv_sučelja, a zatim početne kovrčave zagrade. Zatim imamo razne deklaracije apstraktnih metoda, deklaracije statičkih polja itd. Napokon zatvaramo kovrčave zagrade.
Na primjer,ako želimo proglasiti sučelje 'TestInterface' s dvije metode u njemu, tj. method_one i method_two, tada će deklaracija TestInterface biti kao dolje:
interface TestInterface{ void method_one(); void method_two(); }
Upotreba sučelja u Javi
- Sučelja u Javi pružaju 100% apstrakciju, jer mogu imati samo apstraktne metode.
- Korištenjem sučelja možemo postići više nasljeđivanja u Javi, što nije moguće pomoću klasa.
- Da bi se postiglo labavo spajanje, može se koristiti sučelje.
Kako implementirati sučelje u Javi
Jednom kada je sučelje deklarirano, možemo ga koristiti u klasi pomoću ključne riječi 'implementira' u deklaraciji klase.
Ova se ključna riječ ‘implements’ pojavljuje nakon naziva klase, kao što je prikazano u nastavku:
class implements { //class body }
Implementacija sučelja isto je što i potpisivanje ugovora. Stoga klasa koja implementira sučelje znači da je potpisala ugovor i pristala primijeniti apstraktne metode sučelja ili drugim riječima izvoditi ponašanje određeno sučeljem.
Ako klasa koja implementira sučelje ne provodi točno ponašanje navedeno u sučelju, tada klasu treba proglasiti apstraktnom.
Primjer implementacije sučelja
Slijedi jednostavni primjer sučelja u 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 } }
Izlaz:
Gornji program pokazuje jednostavan primjer sučelja u Javi. Ovdje deklariramo sučelje nazvano Polygon_Shape, a zatim ga klasa Rectangle implementira.
Konvencija o imenovanju sučelja u Javi
Konvencije o imenovanju Java smjernice su imenovanja koje se moramo pridržavati kao programeri kako bismo mogli proizvesti čitljiv dosljedan kôd. Java koristi oznake 'TitleCase' za klase imenovanja i sučelja. Koristi oznake 'CamelCase' za varijable, metode itd.
Što se sučelja tiče, naziv sučelja nalazi se u naslovu s velikim slovom prvo slovo svake riječi imena sučelja. Imena sučelja odabrana su tako da su obično pridjevi. Ali kada sučelja predstavljaju obitelj klasa poput karte ili popisa, tada mogu biti imenovana po imenicama.
U nastavku su navedeni neki primjeri valjanih naziva sučelja:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Konstruktor sučelja
Sljedeće je pitanje ima li sučelje konstruktor?
Znamo da su nam potrebni objekti za pozivanje metoda. Za stvaranje objekata potrebni su nam konstruktori. Ali u slučaju Sučelja u Javi, metode se ne primjenjuju.
Sve metode sučelja su apstraktne. Stoga nema koristi od pozivanja ovih metoda sa sučelja. Drugo, kako su sučelja prema zadanim postavkama apstraktna, ne možemo stvarati objekte sučelja. Stoga nam ne trebaju konstruktori za Interface.
Metode sučelja
U ovom ćemo odjeljku razgovarati o tome kako prijaviti metode sučelja. U pravilu, sučelje može imati samo javne metode ili prema zadanim postavkama, metode sučelja su javne. Unutar sučelja nije dopušteno koristiti niti jedan drugi modifikator pristupa.
Dakle, izričito to izjavljujemo ili ne, svaka metoda u sučelju je prema zadanim postavkama apstraktna s javnom vidljivošću.
Dakle, ako je void printMethod () prototip koji namjeravamo deklarirati u sučelju, tada su sljedeće deklaracije iste.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Imajte na umu da za metode sučelja ne možemo koristiti sljedeće modifikatore unutar sučelja.
- konačni
- statički
- Privatna
- zaštićen
- sinkronizirano
- domorodac
- strogifp
Sada ćemo implementirati Java program za demonstraciju vidljivosti metode sučelja.
//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 } }
Izlaz:
Kao što je već spomenuto, metode sučelja su prema zadanim postavkama javne. Stoga, kada ne navedemo nijedan modifikator pristupa za metodu sučelja, tada je on javan kao u gornjem programu.
Pretpostavimo da promijenimo deklaraciju metode sučelja u gore navedenom programu kako slijedi:
private void printMethod ();
Tada to znači da smo metodu sučelja printMethod () odredili kao privatnu. Kada kompajliramo program, dobivamo sljedeću pogrešku kompajlera.
pogreška: privatni modifikator ovdje nije dopušten
private void printMethod ();
Drugi slučaj koji možemo testirati je promjenom modifikatora implementirane metode u klasi TestClass iz javnog u privatni. Sada je zadani modifikator u klasi privatan. Tako samo uklanjamo javnu ključnu riječ iz prototipa metode u klasi kako slijedi:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Sada ako kompajliramo program, tada ćemo dobiti sljedeću pogrešku.
pogreška: printMethod () u TestClassu ne može implementirati printMethod () u TestInterface
void printMethod ()
^
pokušaj dodjeljivanja slabijih privilegija pristupa; bila javna
Stoga je ovdje važno napomenuti da ne možemo promijeniti modifikator pristupa implementirane metode sučelja u bilo koji drugi modifikator pristupa. Kako su metode sučelja prema zadanim postavkama javne, kada ih implementiraju klase koje implementiraju sučelja, te bi metode također trebale biti javne.
Polja sučelja u Javi
Polja ili varijable deklarirane u sučelju prema zadanim su postavkama javne, statičke i konačne. To znači da se jednom proglašene vrijednosti ne mogu mijenjati.
Imajte na umu da ako su polja sučelja definirana bez navođenja bilo kojeg od ovih modifikatora, tada Java kompajleri pretpostavljaju te modifikatore. Na primjer, ako prilikom deklariranja polja u sučelju ne odredimo javni modifikator, tada se to podrazumevano pretpostavlja.
Kada sučelje implementira klasa, tada pruža implementaciju za sve apstraktne metode sučelja. Slično tome, sva polja deklarirana u sučelju nasljeđuje i klasa koja implementira sučelje. Tako je kopija polja sučelja prisutna u izvedbenoj klasi.
Sada su sva polja u sučelju prema zadanim postavkama statična. Stoga im možemo pristupiti izravnim korištenjem imena sučelja, jednako kao što pristupamo statičkim poljima klase pomoću naziva klase, a ne objekta.
Primjer Java programa u nastavku pokazuje kako možemo pristupiti poljima sučelja.
//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); } }
Izlaz:
Kao što je prikazano u gornjem programu, poljima sučelja može se pristupiti pomoću naziva sučelja iza kojeg slijedi operater točke (.), A zatim stvarnog naziva varijable ili polja.
Generičko sučelje u Javi
U našim ranijim vodičima raspravljali smo o generičkim proizvodima iz Jave. Osim što imamo generičke klase, metode itd., Možemo imati i generička sučelja. Generička sučelja mogu se odrediti slično na način na koji specificiramo generičke klase.
Generička sučelja deklariraju se s parametrima tipa koji ih čine neovisnima o tipu podataka.
Opća sintaksa generičkog sučelja je sljedeća:
informatica powercenter intervju pitanja i odgovori
interface { //interface methods and variables }
Sada ako želimo koristiti gornje generičko sučelje u klasi, onda možemo definicija razreda kao što je prikazano u nastavku:
class implements interface_name { //class body }
Imajte na umu da s klasom moramo navesti isti param-popis kao i sa sučeljem.
Sljedeći Java program prikazuje generička sučelja u 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()); }
Izlaz:
Gornji program implementira sučelje koje sadrži metodu za pronalaženje minimalne vrijednosti u polju. Ovo je generičko sučelje. Klasa implementira ovo sučelje i poništava metodu. U glavnoj metodi nazivamo metodu sučelja kako bismo pronašli minimalnu vrijednost u cijelom broju i nizu znakova.
Više sučelja u Javi
U našoj temi o nasljeđivanju vidjeli smo da Java ne dopušta klasi nasljeđivanje iz više klasa jer rezultira nejasnoćom koja se naziva 'Dijamantni problem'.
Međutim, klasa može naslijediti ili implementirati više od jednog sučelja. U ovom je slučaju poznato kao višestruko nasljeđivanje. Dakle, iako nam nije dopušteno implementirati višestruko nasljeđivanje u Javi kroz klase, to možemo učiniti pomoću sučelja.
Sljedeći dijagram prikazuje višestruko nasljeđivanje pomoću sučelja. Ovdje klasa implementira dva sučelja, tj. Interface_one i Interface_two.
Imajte na umu da kada klasa implementira više sučelja, imena sučelja odvajaju se zarezom u deklaraciji klase. Možemo implementirati onoliko sučelja dokle god možemo podnijeti složenost.
Java program koji prikazuje više sučelja prikazan je u nastavku.
//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(); } }
Izlaz:
besplatni download vatrozida za Windows 10
Kao što je gore prikazano, implementiramo dva sučelja. Tada nadjačavamo njihove metode i pozivamo ih u glavnu metodu.
Višestruko nasljeđivanje u Javi pruža sve prednosti koje višestruko nasljeđivanje pruža u C ++-u. Ali za razliku od višestrukog nasljeđivanja pomoću klasa, višestruko nasljeđivanje pomoću sučelja je bez ikakvih dvosmislenosti.
Nasljeđivanje sučelja u Javi: Sučelje proširuje sučelje
Kada klasa implementira sučelje, to se radi pomoću ' provodi ’Ključna riječ. U Javi sučelje može naslijediti drugo sučelje. To se radi pomoću ' proteže se ’Ključna riječ. Kada sučelje proširi drugo sučelje, to se naziva „ Nasljeđivanje sučelja ”Na Javi.
Java program za implementaciju nasljeđivanja sučelja prikazan je u nastavku.
//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(); } }
Izlaz:
Izmijenili smo isti program koji smo koristili za višestruko nasljeđivanje pomoću sučelja da bismo demonstrirali nasljeđivanje sučelja. Ovdje proširujemo Interface_one u Interface_two, a zatim krećemo u implementaciju Interface_two u klasi. Kako se sučelja nasljeđuju, obje metode su dostupne za nadjačavanje.
Često postavljana pitanja
P # 1) Čemu služi sučelje u Javi?
Odgovor: Sučelje u Javi entitet je koji se koristi za postizanje 100% apstrakcije. Može sadržavati samo apstraktne metode koje klasa koja implementira sučelje može nadjačati.
Sučelje na neki način djeluje poput nacrta klase u kojoj klasi nudi apstraktne prototipove metoda i statičke konstante, a zatim klasa mora nadvladati te metode implementacijom sučelja.
P # 2) Koje su prednosti sučelja u Javi?
Odgovor: Neke od prednosti sučelja su sljedeće:
- Sučelje djeluje kao nacrt klase.
- Sučelje omogućuje 100% apstrakciju u Javi jer ima sve apstraktne metode.
- Sučelja se mogu koristiti za postizanje višestrukog nasljeđivanja u Javi. Java ne dopušta nasljeđivanje iz više klasa, ali klasa može implementirati više sučelja.
# 3) Može li sučelje imati metode?
Odgovor: Sučelja mogu imati prototipove metoda i statičke i konačne konstante. No počevši od Jave 8, sučelja mogu sadržavati statičke i zadane metode.
P # 4) Možemo li sučelje proglasiti konačnim?
Odgovor: Ne. Ako proglasimo sučelje konačnim, tada ga klasa neće moći implementirati. Bez primjene bilo koje klase, sučelje neće imati nikakvu svrhu.
Više o sučeljima
Sučelja su nacrti poput klase, ali imat će samo deklaraciju metode. Neće imati nikakvu metodu provedbe. Sve su metode u sučelju prema zadanim postavkama javne apstraktne. Sučelje Java 1.8 može imati statičke i zadane metode.
Sučelja se uglavnom koriste u API-ima.
Na primjer: Uzmite u obzir da dizajnirate motor vozila.
Kad završite s hardverskim dijelom, želite da neke softverske funkcionalnosti implementira klijent koji koristi vaš motor. Dakle, u tom slučaju možete definirati svoje funkcije motora u sučelju.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Pravila za sučelje
- Klasa koja implementira sučelje trebala bi implementirati sve metode u sučelju.
- Sučelje može sadržavati konačne varijable.
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); } }
Ovdje je klasa Vozila podrazred koji implementira sučelje motora.
Što su sažeti sažeci?
Apstraktna klasa je poput klase, ali imat će apstraktne metode i konkretne metode. Apstraktne metode nemaju provedbu. Imat će samo deklaraciju metode.
Pravila koja se trebaju poštivati za sažetak
- Apstraktna klasa ne može se instancirati.
- Child klasa koja proširuje apstraktnu klasu treba implementirati sve apstraktne metode roditeljske klase ili Child klasa treba biti deklarirana kao apstraktna klasa.
Kada želite osmisliti djelomičnu implementaciju, možete ići na sažetak.
Primjer sažetka programa predavanja:
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 koji će produžiti apstraktni 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 koje treba napomenuti:
- U sučeljima sve metode neće imati implementaciju metode.
- Klasa koja implementira sučelje trebala bi implementirati sve metode u tom određenom sučelju.
- Apstraktne nastave mogu imati apstraktne metode kao i normalne konkretne metode. Apstraktne metode nemaju provedbu.
- Klasa koja proširuje apstraktnu klasu trebala bi imati implementaciju za sve apstraktne metode u apstraktnoj klasi.
- Ako podrazred nema dovoljno podataka za implementaciju apstraktnih metoda, tada bi podrazred trebao biti deklariran kao apstraktna klasa.
Zaključak
U ovom uputstvu predstavili smo osnovne koncepte sučelja u Javi. Razgovarali smo o definiciji sučelja, zajedno s potrebom za sučeljima. Istražili smo njihovu osnovnu sintaksu i definiciju. Zatim smo razgovarali o tome kako koristiti sučelja za koja koristimo ključnu riječ ‘implements’.
Naučili smo kako koristiti više sučelja i nasljeđivanje sučelja u Javi. Korištenjem više sučelja možemo implementirati višestruko nasljeđivanje u Javi. Nasljeđivanje sučelja je kada jedno sučelje proširuje drugo sučelje.
=> Posjetite ovdje da biste vidjeli seriju Java treninga za sve
Preporučena literatura
- OOP Java: Uvod u objektno orijentirano programiranje u Javi
- Usporediva i usporedbena sučelja u Javi
- Poboljšanja sučelja u Javi 8 - Java funkcionalno sučelje
- Vodič za sučelje Java Map s implementacijom i primjerima
- ListIterator sučelje u Javi s primjerima
- Marker sučelje u Javi: serializira se i može se klonirati
- Postavljanje sučelja u Javi: Vodič za postavljanje Java s primjerima
- Java Vodič za refleksiju s primjerima