Rakendab vs laiendab
Rakendused ja laiendamised on Java programmeerimiskeeles leitavad kaks märksõna, mis võimaldavad lisatud funktsionaalsuse uude klassi viia. Rakendamise märksõna kasutatakse liidese rakendamiseks selgesõnaliselt, märksõna (Laiendamine) aga päritakse klassist (super). Pange tähele, et pärandi kontseptsioonid ja liidesed esinevad enamikus teistes objektorienteeritud programmeerimiskeeltes, näiteks C # ja VB.NET, kuid need mõistete rakendamiseks pakuvad erinevat süntaksit või märksõnu. See artikkel keskendub ainult Java-s määratletud märksõnadele rakendamine ja laiendamine.
Pikendab
Laiendamise märksõna kasutatakse Java programmeerimiskeeles pärimise kontseptsiooni rakendamiseks. Pärimine pakub sisuliselt koodi taaskasutamist, võimaldades olemasoleva klassi omadusi ja käitumist laiendada äsja määratletud klassile. Kui uus alaklass (või tuletatud klass) laiendab superklassi (või vanema klassi), pärib see alaklass alaklassi kõik atribuudid ja meetodid. Alamklass võib valikuliselt alistada vanemklassilt päritud käitumise (pakkuda meetoditele uut või laiendatud funktsionaalsust). Alamklass ei saa laiendada Java mitut superklassi. Seetõttu ei saa mitme pärimise korral laiendeid kasutada. Mitme pärimise saamiseks peate kasutama liideseid, nagu allpool selgitatud.
Rakendused
Klassi poolt kasutajaliidese rakendamiseks kasutatakse Java programmeerimiskeeles märksõna. Java liides on abstraktne tüüp, mida kasutatakse lepingu täpsustamiseks, mida peaksid rakendama klassid, kes seda liidest rakendavad. Tavaliselt sisaldab liides ainult meetodi allkirju ja pidevaid deklaratsioone. Iga liides, mis rakendab konkreetset liidest, peaks rakendama kõiki liideses määratletud meetodeid või see tuleks deklareerida abstraktse klassina. Java-keeles saab objekti viite tüübi määratleda liidese tüübina. Kuid see objekt peab olema kas olematu või peaks sisaldama klassi objekti, mis rakendab seda konkreetset liidest. Kasutades Java rakenduses märksõna Implements, saate ühe klassi sisse viia mitu liidest. Liides ei saa teist liidest rakendada. Liides võib aga klassi laiendada.
Erinevus rakenduste ja laiendamiste vahel
Ehkki rakendused ja laiendamised on kaks märksõna, mis pakuvad mehhanismi atribuutide ja käitumise pärandamiseks klassile Java programmeerimiskeeles, kasutatakse neid kahel erineval eesmärgil. Klassi puhul kasutatakse rakenduse märksõna teatud liidese rakendamiseks, samal ajal kui laiendatud märksõna kasutatakse alamklassi laiendamiseks superklassist. Kui klass rakendab liidest, peab see klass rakendama kõiki liideses määratletud meetodeid, kuid kui alamklass laiendab superklassi, võib see algsesse klassi kuuluvaid meetodeid alistada või mitte. Veel üks oluline erinevus rakenduste ja laiendamiste vahel on see, et klass võib rakendada mitmeid liideseid, kuid see võib laieneda ainult ühest Java klassist. Üldiselt peetakse seadme (liidese) kasutamist soodsamaks võrreldes laiendi (pärand) kasutamisega mitmel põhjusel, näiteks suurem paindlikkus ja võimalus minimeerida sidumist. Seetõttu on praktikas põhiklassidest laiendamise asemel eelistatud programmeerimine liidesele.