Java sučelja

1. Pregled

U ovom uputstvu govorit ćemo o sučeljima u Javi. Također ćemo vidjeti kako ih Java koristi za provedbu polimorfizma i višestrukog nasljeđivanja.

2. Što su sučelja u Javi?

U Javi je sučelje apstraktni tip koji sadrži zbirku metoda i konstantnih varijabli. To je jedan od temeljnih koncepata u Javi i jest koristi se za postizanje apstrakcije, polimorfizma i višestrukog nasljeđivanja.

Pogledajmo jednostavan primjer sučelja u Javi:

javno sučelje Elektroničko {// Konstantna varijabla String LED = "LED"; // Apstraktna metoda int getElectricityUse (); // Statička metoda static boolean isEnergyEfficient (String electtronicType) {if (electtronicType.equals (LED)) {return true; } return false; } // Zadana metoda default void printDescription () {System.out.println ("Elektronički opis"); }} 

Sučelje možemo implementirati u Java klasu pomoću provodi ključna riječ.

Dalje, kreirajmo i Računalo klasa koja provodi Elektronički sučelje koje smo upravo kreirali:

javna klasa Računalo implementira Electronic {@Override public int getElectricityUse () {return 1000; }} 

2.1. Pravila za izradu sučelja

U sučelju smijemo koristiti:

  • konstante varijable
  • apstraktne metode
  • statičke metode
  • zadane metode

Također bismo trebali zapamtiti da:

  • ne možemo izravno instancirati sučelja
  • sučelje može biti prazno, bez metoda ili varijabli
  • ne možemo koristiti konačni riječ u definiciji sučelja, jer će rezultirati pogreškom kompajlera
  • sve deklaracije sučelja trebaju imati javnost ili zadani modifikator pristupa; the sažetak modifikator će automatski dodati kompajler
  • metoda sučelja ne može biti privatni, zaštićen, ili konačni
  • varijable sučelja su javnost, statički, i konačni po definiciji; ne smijemo im mijenjati vidljivost

3. Što možemo postići koristeći ih?

3.1. Funkcionalnost ponašanja

Sučelja koristimo za dodavanje određenih funkcionalnosti ponašanja koje mogu koristiti nepovezane klase. Na primjer, Usporedive, Usporednik, i Klonirajući su Java sučelja koja mogu implementirati nepovezane klase. Ispod je primjer Usporednik sučeljekoji se koristi za usporedbu dva slučaja Zaposlenik razred:

javni razred Zaposlenik {privatna dvostruka plaća; public double getSalary () {povrat plaće; } javna nevažeća setSalary (dvostruka plaća) {this.salary = plaća; }} javna klasa EmployeeSalaryComparator implementira Comparator {@Override public int compare (Employee workerA, Employee workerB) {if (workerA.getSalary () workerB.getSalary ()) {return 1; } else {povratak 0; }}} 

Za više informacija posjetite naš vodič na Usporednik i Usporedive na Javi.

3.2. Više nasljedstva

Java satovi podržavaju singularno nasljeđivanje. Međutim, koristeći sučelja, u mogućnosti smo implementirati i više nasljeđivanja.

Na primjer, u primjeru u nastavku primjećujemo da Automobil razredprovodi Letjeti i Transformirati sučelja. Time nasljeđuje metode letjeti i transformirati:

javno sučelje Transform {void transform (); } javno sučelje Fly {void fly (); } automobil javne klase implementira Fly, Transform {@Override public void fly () {System.out.println ("Mogu letjeti !!"); } @Override public void transform () {System.out.println ("Mogu transformirati !!"); }} 

3.3. Polimorfizam

Počnimo s postavljanjem pitanja: što je polimorfizam? To je sposobnost da objekt poprimi različite oblike tijekom izvođenja. Da budemo precizniji, to je izvršavanje metode nadjačavanja koja je povezana s određenim tipom objekta u vrijeme izvođenja.

U Javi možemo postići polimorfizam pomoću sučelja. Na primjer, Oblik sučelje može imati različite oblike - može biti Krug ili a Kvadrat.

Počnimo s definiranjem Oblik sučelje:

oblik javnog sučelja {Naziv niza (); } 

Ajmo sada i stvoriti Krug razred:

public class Circle implementira Shape {@Override public String name () {return "Circle"; }} 

I također Kvadrat razred:

public class Square implementira Shape {@Override public String name () {return "Square"; }} 

Napokon, vrijeme je da vidimo polimorfizam na djelu koristeći naš Oblik sučelje i njegove implementacije. Napravimo nekoliko primjera Oblik objekte, dodajte ih u Popis, i na kraju ispišite njihova imena u petlji:

Oblici popisa = novi ArrayList (); Oblik circleShape = novi krug (); Oblik squareShape = novi kvadrat (); shape.add (shapeShape); oblici.add (kvadratni oblik); za (Oblik oblika: oblici) {System.out.println (shape.name ()); } 

4. Zadane metode u sučeljima

Tradicionalna sučelja u Javi 7 i starijim verzijama ne nude povratnu kompatibilnost.

Što ovo znači je to ako imate naslijeđeni kôd napisan u Javi 7 ili starijoj verziji i odlučite dodati apstraktnu metodu postojećem sučelju, tada sve klase koje implementiraju to sučelje moraju nadjačati novu apstraktnu metodu. U suprotnom, kôd će se pokvariti.

Java 8 je riješila ovaj problem uvođenjem zadane metode to je neobavezno i ​​može se implementirati na razini sučelja.

5. Pravila nasljeđivanja sučelja

Da bismo postigli više nasljeđivanja putem sučelja, moramo upamtiti nekoliko pravila. Idemo detaljno preko njih.

5.1. Sučelje koje proširuje drugo sučelje

Kad sučelje proteže se drugo sučelje, nasljeđuje sve apstraktne metode tog sučelja. Počnimo s izradom dva sučelja, HasColor i Oblik:

javno sučelje HasColor {String getColor (); } okvir javnog sučelja proširuje HasColor {int getHeight ()} 

U gornjem primjeru, Kutija nasljeđuje od HasColor pomoću ključne riječi proteže se. Čineći to, Kutija sučelje nasljeđuje getColor. Kao rezultat, Kutija sučelje sada ima dvije metode: getColor i getHeight.

5.2. Sažetak klase Implementacija sučelja

Kada apstraktna klasa implementira sučelje, ona nasljeđuje sve svoje apstraktne i zadane metode. Razmotrimo Transformirati sučelje i sažetak razred Vozilo koja ga provodi:

javno sučelje Transform {void transform (); zadana void printSpecs () {System.out.println ("Specifikacija transformacije"); }} javna apstraktna klasa Vozilo provodi Transform {} 

U ovom primjeru, Vozilo klasa nasljeđuje dvije metode: sažetak transformirati metoda i zadana printSpecs metoda.

6. Funkcionalna sučelja

Java je imala mnogo funkcionalnih sučelja od svojih ranih dana, kao što je Usporedive (od Jave 1.2) i Izvodljivo (od Jave 1.0).

Java 8 predstavila je nova funkcionalna sučelja poput Predikat, Potrošač, i Funkcija. Da biste saznali više o njima, posjetite naš vodič o funkcionalnim sučeljima u Javi 8.

7. Zaključak

U ovom uputstvu dali smo pregled Java sučelja i razgovarali o tome kako ih koristiti za postizanje polimorfizma i višestrukog nasljeđivanja.

Kao i uvijek, cjeloviti uzorci koda dostupni su na GitHubu.