Rozhrania Java

1. Prehľad

V tomto výučbe si povieme niečo o rozhraniach v Jave. Uvidíme tiež, ako ich Java používa na implementáciu polymorfizmu a viacerých dedičstiev.

2. Čo sú rozhrania v Jave?

V Jave je rozhranie abstraktným typom, ktorý obsahuje zbierku metód a konštantných premenných. Je to jeden z hlavných konceptov v Jave a je používa sa na dosiahnutie abstrakcie, polymorfizmu a viacnásobného dedičstva.

Pozrime sa na jednoduchý príklad rozhrania v Jave:

verejné rozhranie Electronic {// Constant variable String LED = "LED"; // Abstraktná metóda int getElectricityUse (); // Statická metóda static boolean isEnergyEfficient (String electtronicType) {if (electtronicType.equals (LED)) {return true; } return false; } // Predvolená metóda default void printDescription () {System.out.println ("Elektronický popis"); }} 

Môžeme implementovať rozhranie v triede Java pomocou náradie kľúčové slovo.

Ďalej vytvoríme a Počítač trieda, ktorá implementuje Elektronické rozhranie, ktoré sme práve vytvorili:

public class Počítač implementuje Electronic {@Override public int getElectricityUse () {return 1000; }} 

2.1. Pravidlá pre vytváranie rozhraní

V rozhraní môžeme používať:

  • konštanty premenné
  • abstraktné metódy
  • statické metódy
  • predvolené metódy

Mali by sme tiež pamätať na to, že:

  • nemôžeme vytvoriť inštanciu rozhraní priamo
  • rozhranie môže byť prázdne bez akýchkoľvek metód alebo premenných
  • nemôžeme použiť konečné slovo v definícii rozhrania, pretože to bude mať za následok chybu kompilátora
  • všetky vyhlásenia o rozhraní by mali mať verejné alebo predvolený modifikátor prístupu; the abstraktné modifikátor automaticky pridá kompilátor
  • metóda rozhrania nemôže byť súkromné, chránenéalebo konečné
  • premenné rozhrania sú verejné, statickýa konečné podľa definície; nesmieme meniť ich viditeľnosť

3. Čo môžeme dosiahnuť ich použitím?

3.1. Behaviorálna funkčnosť

Rozhrania používame na pridanie určitých funkcií správania, ktoré môžu používať nesúvisiace triedy. Napríklad Porovnateľné, Komparátora Cloneable sú rozhrania Java, ktoré môžu byť implementované nesúvisiacimi triedami. Nižšie je uvedený príklad súboru Komparátor rozhraniektorý sa používa na porovnanie dvoch prípadov Zamestnanec trieda:

verejná trieda Zamestnanec {dvojitý súkromný plat; public double getSalary () {spiatočný plat; } public void setSalary (dvojnásobný plat) {this.salary = plat; }} verejná trieda EmployeeSalaryComparator implementuje komparátor {@Override public int compare (Employee employeeA, Employee employeeB) {if (employeeA.getSalary () employeeB.getSalary ()) {return 1; } else {návrat 0; }}} 

Viac informácií nájdete v našom návode na webe Komparátor a Porovnateľné v Jave.

3.2. Viacnásobné dedičstvo

Triedy Java podporujú singulárne dedičstvo. Použitím rozhraní sme však tiež schopní implementovať viac dedičstiev.

Napríklad v príklade nižšie si všimneme, že: Auto triedarealizuje Leť a Transformácia rozhrania. Týmto spôsobom dedí metódy lietať a transformovať:

verejné rozhranie Transform {void transform (); } verejné rozhranie Fly {void fly (); } public class Car implementuje Fly, Transform {@Override public void fly () {System.out.println ("I can Fly !!"); } @Override public void transform () {System.out.println ("Môžem transformovať !!"); }} 

3.3. Polymorfizmus

Začnime otázkou: čo je to polymorfizmus? Je to schopnosť objektu mať počas behu rôzne formy. Aby sme boli konkrétnejší, je to vykonanie metódy prepísania, ktorá súvisí s konkrétnym typom objektu za behu.

V Jave môžeme polymorfizmus dosiahnuť pomocou rozhraní. Napríklad Tvar rozhranie môže mať rôzne podoby - môže to byť Kruh alebo a Námestie.

Začnime definovaním Tvar rozhranie:

verejné rozhranie Tvar {Názov reťazca (); } 

Teraz vytvorme tiež Kruh trieda:

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

A tiež Námestie trieda:

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

Nakoniec je čas vidieť polymorfizmus v akcii pomocou nášho Tvar rozhranie a jeho implementácie. Poďme niektoré vytvoriť Tvar objekty, pridajte ich do a Zoznam, a nakoniec vytlačte ich mená do slučky:

Zoznam tvarov = new ArrayList (); Tvar kruhuShape = nový kruh (); Tvar squareShape = new Square (); tvary.pridat (circleShape); tvary.pridat (squareShape); pre (Tvar tvaru: tvary) {System.out.println (shape.name ()); } 

4. Predvolené metódy v rozhraniach

Tradičné rozhrania v prostredí Java 7 a nižšie neponúkajú spätnú kompatibilitu.

Čo to znamená, je to Ak máte starší kód napísaný v prostredí Java 7 alebo staršom a rozhodnete sa pridať abstraktnú metódu k existujúcemu rozhraniu, potom všetky triedy, ktoré implementujú dané rozhranie, musia prepísať novú abstraktnú metódu.. V opačnom prípade sa kód pokazí.

Java 8 tento problém vyriešila zavedením predvolenej metódy to je voliteľné a je možné ho implementovať na úrovni rozhrania.

5. Pravidlá dedenia rozhrania

Aby sme prostredníctvom rozhraní dosiahli viac dedičstiev, musíme si pamätať niekoľko pravidiel. Poďme si tieto podrobne rozobrať.

5.1. Rozhranie rozširujúce ďalšie rozhranie

Keď rozhranie predlžuje iného rozhrania, dedí všetky abstraktné metódy tohto rozhrania. Začnime vytvorením dvoch rozhraní, HasColor a Tvar:

verejné rozhranie HasColor {String getColor (); } verejné rozhranie Box rozširuje HasColor {int getHeight ()} 

Vo vyššie uvedenom príklade Krabica dedí z HasColor pomocou kľúčového slova predlžuje. Týmto spôsobom Krabica rozhranie dedí getColor. Výsledkom je, že Krabica rozhranie má teraz dve metódy: getColor a získať výšku.

5.2. Abstraktná trieda implementujúca rozhranie

Keď abstraktná trieda implementuje rozhranie, dedí všetky svoje abstraktné a predvolené metódy. Zvážime Transformácia rozhranie a abstraktné trieda Vozidlo ktorý ho implementuje:

verejné rozhranie Transform {void transform (); default void printSpecs () {System.out.println ("Špecifikácia transformácie"); }} verejná abstraktná trieda Vozidlo implementuje Transformáciu {} 

V tomto príklade Vozidlo trieda dedí dve metódy: abstraktnú transformovať metóda a predvolené printSpecs metóda.

6. Funkčné rozhrania

Java má od svojich počiatkov veľa funkčných rozhraní, ako napr Porovnateľné (od verzie Java 1.2) a Spustiteľné (od verzie Java 1.0).

Java 8 predstavila nové funkčné rozhrania ako napr Predikát, Spotrebiteľa Funkcia. Ak sa o nich chcete dozvedieť viac, navštívte náš výukový program Funkčné rozhrania v prostredí Java 8.

7. Záver

V tomto tutoriáli sme poskytli prehľad rozhraní Java a hovorili sme o tom, ako ich použiť na dosiahnutie polymorfizmu a viacerých dedičstiev.

Kompletné ukážky kódu sú ako vždy k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found