Java interfészek

1. Áttekintés

Ebben az oktatóanyagban a Java felületéről beszélünk. Meglátjuk azt is, hogy a Java hogyan használja fel őket a polimorfizmus és a többszörös öröklés megvalósítására.

2. Mik az interfészek a Java-ban?

A Java-ban az interfész elvont típus, amely metódusok és állandó változók gyűjteményét tartalmazza. Ez a Java egyik alapfogalma és az absztrakció, polimorfizmus és többszörös öröklés elérésére használják.

Lássunk egy egyszerű példát a Java felületére:

nyilvános felület Elektronikus {// Állandó változó String LED = "LED"; // Absztrakt módszer int getElectricityUse (); // Statikus módszer a statikus logikai isEnergyEfficient (String electtronicType) {if (electtronicType.equals (LED)) {return true; } return false; } // Alapértelmezett módszer alapértelmezett void printDescription () {System.out.println ("Elektronikus leírás"); }} 

Egy interfészt egy Java osztályban valósíthatunk meg a megvalósítja kulcsszó.

Ezután hozzunk létre egy a Számítógép osztály, amely végrehajtja a Elektronikus az imént létrehozott felület:

public class Számítógép megvalósítja az elektronikus {@Override public int getElectricityUse () {return 1000; }} 

2.1. Az interfészek létrehozásának szabályai

Egy felületen használhatjuk a következőket:

  • konstans változók
  • elvont módszerek
  • statikus módszerek
  • alapértelmezett módszerek

Arra is emlékeznünk kell, hogy:

  • nem tudjuk azonnali felületeket létrehozni
  • egy interfész lehet üres, metódusok és változók nélkül
  • nem használhatjuk a végső szó az interfész definíciójában, mivel fordítói hibát fog eredményezni
  • minden interfész deklarációnak rendelkeznie kell a nyilvános vagy alapértelmezett hozzáférés-módosító; a absztrakt A módosítót a fordító automatikusan hozzáadja
  • egy interfész módszer nem lehet magán, védett, vagy végső
  • interfész változók nyilvános, statikus, és végső definíció szerint; nem szabad megváltoztatnunk a láthatóságukat

3. Mit érhetünk el ezek használatával?

3.1. Viselkedési funkcionalitás

Interfészeket használunk bizonyos viselkedési funkcionalitások hozzáadásához, amelyeket független osztályok használhatnak. Például, Hasonló, Összehasonlító, és Klónozható olyan Java interfészek, amelyeket független osztályok valósíthatnak meg. Az alábbiakban bemutatunk egy példát a Összehasonlító felülethogy a két példány összehasonlítására szolgál Munkavállaló osztály:

közosztály Osztály {magán kettős fizetés; public double getSalary () {visszatérési fizetés; } public void setBér (kettős fizetés) {ez.fizetés = fizetés; }} public class EmployeeSalaryComparator implementálja a Comparator {@Orride public int összehasonlítás (Employee workerA, Employee workerB) {if (workerA.getSalary () workerB.getSalary ()) {return 1; } else {return 0; }}} 

További információért kérjük, látogasson el a bemutatónkra Összehasonlító és Hasonló Java-ban.

3.2. Több örökség

A Java osztályok támogatják az egyedi öröklődést. Felületek használatával azonban több örökséget is megvalósíthatunk.

Például az alábbi példában azt vesszük észre, hogy a Autó osztályvégrehajtja a Légy és Átalakítás interfészek. Ezzel örökli a módszereket légy és átalakul:

nyilvános felület Transform {void transform (); } nyilvános felület Fly {void fly (); } public class Car hajtja végre a Fly, Transform {@Orride public void fly () {System.out.println ("Repülhetek !!"); } @Orride public void transform () {System.out.println ("Át tudom alakítani !!"); }} 

3.3. Polimorfizmus

Kezdjük azzal, hogy feltesszük a kérdést: mi a polimorfizmus? Ez egy objektum azon képessége, hogy futás közben különböző formákat öltsön. Pontosabban: az override metódus végrehajtása, amely futás közben kapcsolódik egy adott objektumtípushoz.

A Java-ban interfészek segítségével érhetjük el a polimorfizmust. Például a Alak Az interfész különböző formákat ölthet - lehet a Kör vagy a Négyzet.

Kezdjük azzal, hogy meghatározzuk a Alak felület:

nyilvános felület Alakzat {String name (); } 

Most hozzuk létre a Kör osztály:

a kör nyilvános osztálya hajtja végre az Alakzat {@Orride public String name () {return "Kör" kifejezést; }} 

És a Négyzet osztály:

a nyilvános osztály Square megvalósítja az Alakzat {@Orride public String name () {return "Square"; }} 

Végül itt az ideje, hogy a polimorfizmust működésünkben lássuk a mi segítségével Alak interfész és megvalósításai. Pillantsunk be néhányat Alak objektumokat, adja hozzá őket a Lista, és végül hurokban nyomtassák ki a nevüket:

Listaalak = new ArrayList (); Shape circleShape = új kör (); Shape squareShape = új négyzet (); shape.add (körShape); shape.add (squareShape); for (Alakforma: alakzatok) {System.out.println (alaknév ()); } 

4. Alapértelmezett módszerek az interfészekben

A Java 7 vagy újabb verziójú hagyományos interfészek nem kínálnak visszamenőleges kompatibilitást.

Ez azt jelenti, hogy Ha a Java 7-ben vagy régebbi verziókban van régi kód, és úgy dönt, hogy absztrakt metódust ad hozzá egy meglévő interfészhez, akkor az összes interfészt megvalósító osztálynak felül kell írnia az új absztrakt metódust. Ellenkező esetben a kód megszakad.

A Java 8 megoldotta ezt a problémát az alapértelmezett módszer bevezetésével ez opcionális és interfész szinten megvalósítható.

5. Interfész öröklési szabályok

Annak érdekében, hogy több öröklődést érjünk el az interfészek között, emlékeznünk kell néhány szabályra. Nézzük át ezeket részletesen.

5.1. Interfész Egy másik interfész kiterjesztése

Amikor egy felület kiterjed egy másik interfész, örökli a felület összes elvont módszerét. Kezdjük két interfész létrehozásával, HasColor és Alak:

nyilvános felület HasColor {String getColor (); } nyilvános felület Box kiterjeszti a HasColort {int getHeight ()} 

A fenti példában Doboz örököl HasColor a kulcsszó használatával kiterjed. Ezzel a Doboz interfész örökli getColor. Ennek eredményeként a Doboz interfész most két módszerrel rendelkezik: getColor és getHeight.

5.2. Absztrakt osztály interfész megvalósítása

Amikor egy absztrakt osztály implementál egy interfészt, akkor örököl minden absztrakt és alapértelmezett metódust. Vegyük fontolóra a Átalakítás interfész és a absztrakt osztály Jármű amely megvalósítja:

nyilvános felület Transform {void transform (); alapértelmezett void printSpecs () {System.out.println ("Átalakítási specifikáció"); }} nyilvános absztrakt osztályú jármű hajtja végre az átalakítást {} 

Ebben a példában a Jármű osztály két módszert örököl: az absztrakt átalakul módszer és az alapértelmezett printSpecs módszer.

6. Funkcionális interfészek

A Java a kezdetektől fogva számos funkcionális felülettel rendelkezik, mint pl Hasonló (Java 1.2 óta) és Futható (Java 1.0 óta).

A Java 8 új funkcionális interfészeket vezetett be, mint pl Állítmány, Fogyasztó, és Funkció. Ha többet szeretne megtudni ezekről, keresse fel a Java 8 funkcionális interfészei című oktatóanyagunkat.

7. Következtetés

Ebben az oktatóanyagban áttekintést adtunk a Java interfészekről, és beszéltünk arról, hogyan lehet őket felhasználni a polimorfizmus és a többszörös öröklődés elérésére.

Mint mindig, a teljes kódminták elérhetők a GitHubon.