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

Hasonló dokumentumok
Java programozási nyelv 5. rész Osztályok III.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Osztályok. 4. gyakorlat

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

C++ programozási nyelv

C++ programozási nyelv Konstruktorok-destruktorok

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

C++ programozási nyelv

C++ programozási nyelv

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozási nyelvek Java

III. OOP (objektumok, osztályok)

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

és az instanceof operátor

Programozási nyelvek Java

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java és web programozás

Java és web programozás

Java VII. Polimorfizmus a Java nyelvben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java VII. Polimorfizmus a Java nyelvben

Java és web programozás

C++ programozási nyelv Konstruktorok Gyakorlat

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java programozási nyelv 6. rész Java a gyakorlatban

Bevezetés a Python programozási nyelvbe

Objektumorientált programozás C# nyelven

C++ programozási nyelv Struktúrák a C++ nyelvben

BME MOGI Gépészeti informatika 8.

OOP #14 (referencia-elv)

Objektumok inicializálása

Interfészek. PPT 2007/2008 tavasz.

Java IX. telkezelés a Java-ban

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java IX. telkezelés a Java-ban

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Már megismert fogalmak áttekintése

Programozási nyelvek Java

A Java és a C++ összehasonlítása

Bevezetés, a C++ osztályok. Pere László

Java programozási nyelv

Származtatási mechanizmus a C++ nyelvben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás I. Első ZH segédlet

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

3. gyakorlat. Objektumorientált programozás

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Öröklés és Polimorfizmus

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Segédanyag: Java alkalmazások gyakorlat

Osztály és objektum fogalma

Objektumorientált szoftverfejlesztés alapjai

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Programozási nyelvek II.: JAVA

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

JAVA PROGRAMOZÁS 3.ELŐADÁS

Objektumorientált programozás C# nyelven

Programozási nyelvek II.: JAVA

Elemi Alkalmazások Fejlesztése II.

Objektumorientált programozás IX. Osztályok, objektumok

Magas szintű programozási nyelvek 2 Előadás jegyzet

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Objektumorientált programozás C# nyelven

Java programozási nyelv

Programozás II. 4. Dr. Iványi Péter

Programozási alapismeretek 4.

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Osztályok, objektumok

Programozási nyelvek II.: JAVA

Web-technológia PHP-vel

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Programozás II. 6.Öröklés Dr. Iványi Péter

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Átírás:

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 A Java programozási nyelv Soós Sándor 1/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 nyelv Soós Sándor 2/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 nyelv Soós Sándor 3/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 nyelv Soós Sándor 4/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 nyelv Soós Sándor 5/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 nyelv Soós Sándor 6/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 nyelv Soós Sándor 7/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 nyelv Soós Sándor 8/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 nyelv Soós Sándor 9/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 nyelv Soós Sándor 10/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 nyelv Soós Sándor 11/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 nyelv Soós Sándor 12/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 nyelv Soós Sándor 13/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 nyelv Soós Sándor 14/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 nyelv Soós Sándor 15/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 nyelv Soós Sándor 16/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 A Java programozási nyelv Soós Sándor 17/17