A Java tisztán objektum-orientált nyelv. Ez azt jelenti hogy minden objektum a programban. Az objektumok valamilyen osztály egy-egy példánya, mely a példányosítás során jön létre. Az egyes objektumpéldányok létrehozása kostruktorral történik. Ha nem definiálunk konstruktort akkor is létezik az osztály nevével azonos nevű metódus. Ennek fő feladata a memóriafoglalás és az objektum kezdeti állapotának beállítása. A Szelvény osztálynak két konstruktort definiáltunk. Egy paraméterezettet és egy paraméter nélkülit. A példányosítás után az objektumnak a publikus metódusain keresztül üzeneteket tudunk küldeni, illetve a publikus adattagok közvetlenül elérhetők (ezt én kerülendőnek tartom még akkor is ha triviális lenne a megoldás).
Minden osztályt külön forrásfájlban (.java kiterjesztésű fájl) kell definiálni. A forrásfájl nevének meg kell egyezni az osztály nevével. Így lett a Szelveny osztályunk a Szelveny.java fájlba definiálva.
Amikor egy osztályt a virtuális gépbe betöltünk akkor a JVM megpróbálja elindítani az osztály main() metódusát. Ha ilyet talál akkor elindul a metódus. Így indíthatók a programok.
Hozzunk létre most egy LottoTest osztályt, amibe létrehozzuk a main() metódust. Ennek is szabályai vannak, az alábbi kötött formában kell definiálni a main()-t.
- public class LottoTest {
- public static void main(String[] args){
- //létrehozunk két szelvényt
- //sz1 automatikusan generált 5 számot fog tartalmazni
- Szelveny sz1 = new Szelveny();
- //sz2 a paramétrelistájában megadott öt számot tartalmazza
- Szelveny sz2 = new Szelveny(19,71,8,16,7);
- }
- }
Ezzel létrehoztunk két objektumot, melyek tartalmaznak tippeket. Ezeket a tippeket írassuk most ki!
Rá kell jönnünk hogy a szelvény osztályban nem készítettünk metódust a kiíratásra, az adattag ami a tippeket tartalmazza az pedig private (nagyon helyesen), amihez ugyebár az objektumon kívülről nem lehet hozzáférni. Készítenünk kell hát valamilyen metódust ami kiíratja, vagy visszaadja a tippeket.
A Java-ban szokás definiálni egy toString() metódust. Ez kvázi szabvány. A metódus visszaad egy String típusú értéket mely tartalmazza azt a szöveget, amit az objektum adatairól tartalmaz információt. Most ezt fogjuk megadni. Egyébként a számok tárolására használt TreeSet konténernek is van "gyári" toString() metódusa, amit fel is használunk.
Természetesen a Szelveny.java fájlt kell kiegészíteni a következő sorokkal:
- public String toString(){
- // a TreeSet objektum toString() metódusát úgy írták meg hogy
- // [] jelek között, vesszővel elválasztva felsorolja
- // növekvő sorrendben az elemeit. Ez nekünk teljesen megfelel!
- return "Szelvény száma: "+szelvenyId+" Tippek: " + tippek.toString();
- }
Ezek után már a tesztelő osztályunkban a példányosítások után használhatjuk is a szelvények toString()-jét a kiíratásra.
A kiíratáskor a kiertekel() metódust felhasználva, értékeltessük is ki a szelvényeket.
Ez lesz a tesztelő osztályunk tartalma:
- public class LottoTest {
- public static void main(String[] args){
- //létrehozunk két szelvényt
- //sz1 automatikusan generált 5 számot fog tartalmazni
- Szelveny sz1 = new Szelveny();
- //sz2 a paramétrelistájában megadott öt számot tartalmazza
- Szelveny sz2 = new Szelveny(19,71,8,16,7);
- // ha nem adjuk meg cska az objektum nevét, akkor megpróbálja megfelelő típusúra konvertálni.
- //String típushoz a toString() metódust hívja automatikusan.
- System.out.println(sz1 + " Találatok száma: " + sz1.kiertekel(2,7,18,71,87));
- System.out.println(sz2 + " Találatok száma: " + sz1.kiertekel(2,7,18,71,87));
- }
- }
Futtatás hatására a kimenet hasonló lesz (valószínű más számok jelennek meg az sz1 kiírásakor)
Szelvény száma: -1 Tippek: [8, 51, 66, 71, 75] Találatok száma: 1
Szelvény száma: -1 Tippek: [7, 8, 16, 19, 71] Találatok száma: 2