Windows käsurida
Igale arvutile on töötamiseks paigaldatud operatsioonisüsteem (näiteks MS...
Kui Javas muutub klasside loomise struktuur keerulisemaks, siis esimesena tutvutakse kontseptsiooniga pärilus (inheritance). See tähendab, et olemasolevast klassist saame luua alamklasse, ilma põhiklassi muutmata. Tegemist on klasside hierarhiaga, kus ülemklassis (superclass, parent class) lood põhiväljad ja meetodid, mis kanduvad üle alamklassile (subclass, child class). Kuid alamklassis saad luua uusi väljasid ja meetodeid vastavalt eripärale. Kogu seda mehhanismi, kus alamklass sõltub ülemklassist, nimetataksegi päriluseks või ka laiendamiseks.
Kõige lihtsam on seda kirjeldada näiteks loomadega. Ülemklassiks ongi Loom. Alamklassideks on aga näiteks imetajad, roomajad, linnud, kahepaiksed ja kalad.
Ülemklassiga määrame kõigile klassidele ühised omadused nagu näiteks sugu, toitumine ja kas on püsi- või kõigusoojased. Alamklassid saavad kasutada ülemklassist pärit muutujaid ja meetodeid. See tähendab, et neid ei pea neid iga kord iga alamklassiga uuesti looma. Ülemklasse võib olla ainult üks (va Object-tüüpi alamklass).
Alamklasse ja selle hargnemisi võib olla mitu. Alamklassiga saab lisaks ainult talle omaseid muutujaid ja meetodeid. Alloleval skeemil on näha, kes haugub, kes krooksub jne.
Paneme selle ka siis koodi. Kõige pealt ülemklass Loom.java. Lisame selle kõik paketti zoo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package zoo; public class Loom { protected String sugu; public void toit(){ System.out.println("Söön kõike"); } public void temp(){ System.out.println("püsisoojane"); } public String getSugu() { return sugu; } public void setSugu(String sugu) { this.sugu = sugu; } } |
Pane tähele, et kasutame muutuja puhul protected
võtmesõna, mis lubab ligipääsu ainult samal ja alamklassidel. Alamklassist toon ainult ühe näite Imetaja.java. Et määrata, mis on selle klassi ülemklass, kasutame võtmesõna extends
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package zoo; public class Imetaja extends Loom{ private String nimi; public Imetaja(String nimi) { this.nimi = nimi; } public String getNimi() { return nimi; } public void setNimi(String nimi) { this.nimi = nimi; } public void haugu(){ System.out.println("Auh auh"); } } |
Loome testimiseks siis App.java ning uue Imetaja. Esimese kommentaari alla lisasin meetodid, mis tulevad otse põhiklassist. Kasuta meetodeid, nagu oleks need selle omad. Ja kuna alamklassil on oma meetodid, siis saame kasutada ka neid. Läbi alamklasside saame kasutada sama meetodit, kuigi nende väljund võib olla erinev (polümorfism).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package zoo; public class App { public static void main(String[] args) { //objekt Imetaja koer = new Imetaja("Pauka"); //põhiklassist koer.setSugu("M"); System.out.println("Sugu: "+koer.sugu); koer.toit(); koer.temp(); //alamklassist koer.setNimi("Pauka"); System.out.println("Nimi: "+koer.getNimi()); koer.haugu(); } } /* VÄLJUND: Sugu: M Söön kõike püsisoojane Nimi: Pauka Auh auh */ |
Java võimaldab alamklassis samanimelist meetodit, mis on ülemklassis, üle kirjutada. Sellisel juhul kasutatakse @Override
viidet. Võtame näiteks temp() meetodi.
1 2 3 4 5 6 7 8 9 10 11 12 13 | package zoo; public class Imetaja extends Loom{ ... @Override public void temp(){ System.out.println("kõigusoojane"); } } |
Ja nüüd ülemklassis loodud temp()
meetod väljastab midagi muud.
JAR (Java Archive) on platvormist sõltumatu Java kompileeritud failide kokkupakkimisformaat. See põhineb populaarsel ZIP algoritmil, seega võid pärast neid avada mõne kokkupakkimisprogrammiga.
Eclipse IDE:
Kui see fail nüüd näiteks WinRar’iga avada, siis oleks seal sees nii:
JAR faili käivitamiseks ava cmd ja liigu kataloogi, kuhu faili paigutasid. Minu puhul näiteks töölaud.
Järgmisena trüki sisse järgmine käsk
1 2 | java -classpath .;zoo.jar zoo.App |
Viimane osa käsureast tuleb paketinimest ja klassist, kus asub põhimeetod main()
.
Kui kasutad muid programme nagu VS Code vms, siis need ei sisalda otsest funktsionaalsust JAR-failide loomiseks nagu mõned integreeritud arenduskeskkonnad (IDEs) nagu Eclipse või IntelliJ IDEA. JAR-faili loomiseks peate kasutama käsurida
javac
on teie süsteemi PATH muutujas, saate kompileerida oma Java faile, kasutades terminali:1 2 | javac MyMainClass.java |
See tekitab .class
faile teie Java koodi jaoks.
Manifest.txt
ja sisestage järgmine:1 2 | Main-Class: MyMainClass |
(Veenduge, et teil oleks pärast Main-Class: MyMainClass
uus rida)
jar
käsku, et pakkida .class
faile ja manifesti faili JAR-failiks:1 2 | jar cvfm MyProgram.jar Manifest.txt *.class |
Selles näites:
c
loob uue arhiiviv
tekitab väljundit (valikuline)f
määrab faili nimem
lisab manifesti failiPeale selle käsu käivitamist peaks teil olema fail nimega MyProgram.jar
teie kataloogis.
1 2 | java -jar MyProgram.jar |
Päriluse rakendamine loomapargis
Sinu ülesandeks on laiendada antud loomapargi koodi, lisades veel mitu loomaklassi ja nende omadusi.
Loom
jaoks. Võid valida näiteks järgmiste seast: Roomaja, Lind, Kala. Igal loomaklassil peab olema vähemalt üks eripärane omadus või meetod.toit()
, et see näitaks spetsiifilisemat toitumisviisi.App
klassis vähemalt üks objekt igast loomaklassist ja kutsu välja nende meetodeid, sealhulgas ülekirjutatud meetodeid. Kontrolli, kas kõik väljastab oodatud tulemuse.Nõuded:
extends
võtmesõna.@Override
annotatsiooni.