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 2005. szeptember. Java programozási nyelv 4 . rész – Osztályok II. Tartalomjegyzék. Konstruktorok A múlt órai példa Az Auto3 konstruktorai Inicializációs blokkok Auto4 példa Destruktor jellegű metódusok

unity-ball
Télécharger la présentation

Java programozási nyelv 4 . rész – Osztályok II.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember Java programozási nyelv4. rész – Osztályok II.

  2. 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

  3. 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.

  4. 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

  5. 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; }

  6. 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 ); }

  7. 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.

  8. 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

  9. 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 {}

  10. Ö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.

  11. 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.

  12. 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; } }

  13. 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.

  14. 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

  15. 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

  16. 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

  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

More Related