Rakendab vs laiendab
Rakendused ja laiendused on kaks Java-programmeerimiskeeles leiduvat märksõna, mis pakuvad võimalust lisada funktsionaalsus uude klassi. Rakendusmärksõna kasutatakse liidese juurutamiseks sõnaselgelt, märksõna Laiendab aga (super) klassist pärimiseks. Pange tähele, et pärimise ja liideste mõisted esinevad enamikus teistes objektorienteeritud programmeerimiskeeltes, näiteks C # ja VB. NET, kuid need pakuvad nende mõistete rakendamiseks erinevat süntaksit või märksõnu. See artikkel keskendub ainult Java-s määratletud märksõnade rakendamisele ja laiendamisele.
Pikendab
Pärandi kontseptsiooni juurutamiseks Java programmeerimiskeeles kasutatakse märksõna Extends. Pärand annab sisuliselt koodi taaskasutuse, võimaldades olemasoleva klassi omaduste ja käitumise laiendamist äsja määratletud klassi võrra. Kui uus alaklass (või tuletatud klass) laiendab superklassi (või vanemklassi), pärib see alaklass kõik superklassi atribuudid ja meetodid. Alamklass võib valikuliselt alistada käitumise (pakkuda meetoditele uut või laiendatud funktsionaalsust), mis on päritud vanemklassilt. Alamklass ei saa Java-s laiendada mitut superklassi. Seetõttu ei saa te laiendusi mitme pärimise jaoks kasutada. Mitme pärimise saamiseks peate kasutama allpool selgitatud liideseid.
Rakendab
Rakenduse märksõna Java programmeerimiskeeles kasutatakse liidese rakendamiseks klassis. Java liides on abstraktne tüüp, mida kasutatakse lepingu määramiseks, mida peaksid rakendama klassid, kes seda liidest rakendavad. Tavaliselt sisaldab liides ainult meetodi allkirju ja konstantseid deklaratsioone. Iga liides, mis rakendab konkreetset liidest, peaks rakendama kõiki liideses määratletud meetodeid või tuleks see deklareerida abstraktse klassina. Java-s saab objekti viite tüübi määratleda liidese tüübina. Kuid see objekt peab olema null või peaks sellel olema klassi objekt, mis seda konkreetset liidest rakendab. Kasutades Java-s märksõna Implements, saate rakendada ühte klassi mitu liidest. Liides ei saa teist liidest rakendada. Kuid liides võib klassi laiendada.
Rakenduste ja laienduste erinevus
Ehkki rakendused ja laiendused on kaks märksõna, mis pakuvad mehhanismi Java atribuutide ja käitumise pärimiseks Java-programmeerimiskeeles, kasutatakse neid kahel erineval eesmärgil. Rakendusmärksõna kasutatakse klassi jaoks teatud liidese rakendamiseks, märksõna Laiendab aga alamklassi jaoks superklassist laiendamiseks. Kui klass rakendab liidest, peab see klass rakendama kõiki liideses määratletud meetodeid, kuid kui alaklass laiendab superklassi, võib see alamklassi kaasatud meetodid alistada või mitte. Lõpuks on teine oluline erinevus rakenduste ja laienduste vahel see, et klass võib rakendada mitut liidest, kuid see võib laieneda ainult ühest Java klassist. Üldiselt peetakse seadmete (liideste) kasutamist soodsamaks võrreldes laienduste (pärand) kasutamisega,mitmel põhjusel, näiteks suurem paindlikkus ja võime sidumist minimeerida. Seetõttu on praktikas liidese jaoks programmeerimine eelistatud baasklassidest laienemisele.