A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor szeptember
A Java programozási nyelvSoós Sándor 2/17 Tartalomjegyzék ● Konstruktorok ● A múlt órai példa ● Az Auto3 konstruktorai ● Inicializációs blokkok ● Auto4 példa ● Destruktor jellegű metódusok ● Öröklődés, kiterjesztés ● Konstruktorok és az öröklődés ● Példa: Taxi osztály ● Polimorfizmus ● Példa polimorfizmusra: Auto3, Taxi, TaxiTest
A Java programozási nyelvSoós Sándor 3/17 Konstruktorok ● A konstruktor a példányosításkor automatikusan lefutó programkód. ● Miben különbözik a metódusoktól? – neve megegyezik az osztály nevével – nincs visszatérési érték, void sincs! – módosítóként csak a hozzáférés módosítók használhatók ● Több konstruktort is definiálhatunk különböző szignatúrával ● Ha nem definiálunk konstruktort, akkor a fordító létrehoz egyet, ami public, paraméter nélküli és a törzse üres. ● A this kulcsszóval hivatkozhatunk az aktuális példányra. Így elérhetjük az elfedett változó neveket, és más konstruktorokat is.
A Java programozási nyelvSoós Sándor 4/17 A múlt órai példa public class Auto3 { String rendszam; String tipus; int ajtoszam; int hengerszam; int ev; int suly; int kilometer; float fogyasztas; // folytatás a következő dián
A Java programozási nyelvSoós Sándor 5/17 Az Auto3 konstruktorai 1 public Auto3( String rendszam, String tipus, int ajtoszam, int hengerszam, int ev, int suly, int kilometer, float fogyasztas) { this.rendszam = rendszam; this.tipus = tipus; this.ajtoszam = ajtoszam; this.hengerszam = hengerszam; this.ev = ev; this.suly = suly; this.kilometer = kilometer; this.fogyasztas = fogyasztas; }
A Java programozási nyelvSoós Sándor 6/17 Az Auto3 konstruktorai 2 public Auto3() { this( "", "", 0, 0, 0, 0, 0, 0.0f ); } public Auto3( String rendszam, String tipus) { this( rendszam, tipus, 0, 0, 0, 0, 0, 0.0f ); }
A Java programozási nyelvSoós Sándor 7/17 Inicializációs blokkok ● Az osztálydefinícióba írt blokkok, {...} között. ● A változódeklarációk közé írható. ● Az előfordulás sorrendjében fognak lefutni. ● Mindig csak azok a változók használhatók, amelyek már létrejöttek. ● Ezek az utasítások minden konstruktor lefutása előtt végrehajtódnak. ● Lehetnek osztály (static) és példány inicializáló blokkok.
A Java programozási nyelvSoós Sándor 8/17 Auto4 példa public class Auto4 { String rendszam; String tipus = "Citroen Xsara Picasso"; int ajtoszam; int hengerszam; int suly; { if ( tipus.equalsIgnoreCase("citroen xsara picasso") ) { ajtoszam = 5; hengerszam = 4; suly = 1300; } } // az inicializáló blokk vége int ev;... } // az osztály definíció vége
A Java programozási nyelvSoós Sándor 9/17 Destruktor jellegű metódusok ● A garbage collector miatt nekünk nem kell foglalkoznunk az objektumok megsemmisítésével. ● Olyan műveletek azonban lehetnek, amelyeket végre szeretnénk hajtani mielőtt a garbage collector megsemmisítené az objektumot. ● Erre szolgál a Finalize, illetve a classFinalize metódus: – protected void Finalize() throws Throwable {} – static void classFinalize() throws Throwable {}
A Java programozási nyelvSoós Sándor 10/17 Öröklődés, kiterjesztés ● Egy osztályt egy meglévő osztály kiterjesztéseként definiálunk. ● A Java-ban minden osztály kiterjesztett, ugyanis, ha nem mondunk mást, akkor a java.lang.Object osztályból származik az osztály. ● Az örökítést az extends kulcsszó jelzi. ● A leszármazott osztály rendelkezik a szülő osztály minden tagjával, de csak azokat látja, amelyekhez a szülő hozzáférést engedélyezett. ● A private tagokból van példánya, de nem férhet hozzájuk közvetlenül.
A Java programozási nyelvSoós Sándor 11/17 Konstruktorok és az öröklődés ● A konstruktorokat a leszármazott nem örökli. ● A gyermek konstruktorának első sorában meghívhatjuk az ős bármelyik konstruktorát a super kulcsszóval. ● Ha ezt nem tesszük meg, a fordító akkor is meghívja a szülő paraméter nélküli konstruktorát. Ez megelőzi a gyerekben deklarált példányváltozók inicializálását és az inicializáló blokkok végrehajtását is.
A Java programozási nyelvSoós Sándor 12/17 Példa: Taxi osztály public class Taxi extends Auto3 { String ceg; int kmdij; public Taxi( String rendszam, String tipus, int ajtoszam, int hengerszam, int ev, int suly, int kilometer, float fogyasztas, String ceg, int kmdij) { super( rendszam, tipus, ajtoszam, hengerszam, ev, suly, kilometer, fogyasztas ); this.ceg = ceg; this.kmdij = kmdij; }
A Java programozási nyelvSoós Sándor 13/17 Polimorfizmus ● Egy gyermek rendelkezik őseinek minden tulajdonságával, ezért minden környezetben használható, ahol az ős használható. ● Az automatikus típuskonverzió révén egy Auto3 típusú változónak értékül adható egy Taxi típusú. ● Ezt nevezzük polimorfizmusnak. ● Egy változónak van statikus és dinamikus típusa: – statikus típus: ami a deklarációban szerepel (állandó) – dinamikus típus:az objektum pillanatnyi típusa (változhat) ● A polimorfizmus a metódusok felüldefiniálása révén teljesedik ki.
A Java programozási nyelvSoós Sándor 14/17 Példa polimorfizmusra: Auto3 public class Auto3 {... private int Benzinkoltseg( int km ) { System.out.println( "Benzinkoltseg-Auto3" ); return ( (int) (km * fogyasztas / 100 * BENZINAR) ); } protected int Egyebkoltseg( int km ) { System.out.println( "Egyebkoltseg-Auto3" ); return ( 0 ); } public int Utikoltseg( int km ) { System.out.println( "Utikoltseg" ); return ( Benzinkoltseg( km ) + Egyebkoltseg( km ) ); } } // az osztály vége
A Java programozási nyelvSoós Sándor 15/17 Példa polimorfizmusra: Taxi public class Taxi extends Auto3 { String ceg; int kmdij; … protected int Egyebkoltseg( int km ) { System.out.println( "Egyebkoltseg-Taxi" ); return ( km * kmdij ); } } // az osztály vége
A Java programozási nyelvSoós Sándor 16/17 Példa polimorfizmusra: TaxiTest public class TaxiTest { public static void main( String[] args ) { Taxi egyTaxi = new Taxi("IZV-186", "Picasso", 5, 4, 2003, 1300, 20000, 5.5f, "Fotaxi", 10); Auto3 egyAuto = new Auto3("IZV-186", "Picasso", 5, 4, 2003, 1300, 20000, 5.5f); Auto3 kocsi; int dij; kocsi = egyAuto;// vagy ez // kocsi = egyTaxi;// vagy ez dij = kocsi.Utikoltseg( 100 ); System.out.println( "Utikoltseg: " + dij + " Ft" ); } // a main metódus vége } // az osztály vége
A Java programozási nyelvSoós Sándor 17/17 A program kimenetei Ha kocsi = egyAuto: Utikoltseg Benzinkoltseg-Auto3 Egyebkoltseg-Auto3 Utikoltseg: 1375 Ft Ha kocsi = egyTaxi: Utikoltseg Benzinkoltseg-Auto3 Egyebkoltseg-Taxi Utikoltseg: 2375 Ft