Abstract Javaságok -...
Transcript of Abstract Javaságok -...
![Page 1: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/1.jpg)
B IT MAN89/1 v: 2018.03.13B IT MAN
5. Ea: OOP alapok
Java Programozás
Abstract Javaságok
![Page 2: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/2.jpg)
B IT MAN89/2
![Page 3: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/3.jpg)
B IT MAN89/3
OOP alapelvek
Adatok és a hozzájuk kapcsolódó tevékenységek egységbe zárása
(encapsulation)
– Alapegység: osztály, melynek építőkövei:
• adattagok,
• metódusok.
Információ rejtés: Egy objektum adatai a külvilág számára
hozzáférhetetlenek. Egy objektum a külvilággal csak az interfészén
keresztül tarthatja a kapcsolatot. (Interface: a külvilág számára
elérhető módszerek –metódusok– együttese.) A módszerek
implementációja rejtett.
Öröklődés (inheritance): az osztályok egy részét már meglévő
osztályok továbbfejlesztésével hozzuk létre, úgy, hogy további
adattagokkal, illetve metódusokkal bővítjük.
Többalakúság (polimorphism): A származtatott osztályokban
lehetnek ugyanolyan elnevezésű, de más tevékenységű metódusok,
mint az ős osztályban => áttekinthető kód, nem kell az
elnevezéseket variálnunk.
![Page 4: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/4.jpg)
B IT MAN89/4
További OOP alapfogalmak
Osztály: Objektumok közös tulajdonságait definiálja.
Programozástechnika szempontból egy típus. Építőkövei:
– adattagok (attribútumok, jellemzők, tulajdonságok),
– metódusok (műveletek, viselkedés).
Objektum: Egy osztály egy működőképes példánya. Egy adott
osztályban definiált tulajdonságokkal tetszőleges számú
objektum példányosítható. Minden objektum természeténél
foga különbözik az összes többitől. Egy adott osztályból
példányosított valamennyi objektumnak ugyanolyan
lehetséges viselkedési módjai vannak, de mindnek saját
állapota van.
Üzenet: Az objektummal való kommunikáció módja. A
módszerek (metódusok) aktivizálását jelenti.
![Page 5: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/5.jpg)
B IT MAN89/5
![Page 6: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/6.jpg)
B IT MAN89/6
Öröklődés
Fogalma: új osztály létrehozása (gyermek) egy már
meglévő osztályt (szülő) felhasználva (kód
újrafelhasználás).
A gyermek osztály örökli a szülő osztály összes tagját, -
kivéve a konstruktorokat és az inicializáló blokkokat -,
definiálhat új tagokat és módosíthat örökölt tagokat.
![Page 7: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/7.jpg)
B IT MAN89/7
Öröklődés
Gyakran előfordul, hogy egy program különböző
osztályai azonos adattagokkal és metódusokkal
rendelkeznek
Példa: Neptun felhasználók
![Page 8: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/8.jpg)
B IT MAN89/8
Öröklődés
Az előző példában minden osztályban szerepel három
azonos adat:
– név, neptunKód, jelszó
Minden osztályban szerepel a:
– Bejelentkezés() metódus
Az osztályok ezen kívül rendelkeznek csak rájuk
jellemző adattagokkal és metódusokkal is
Az adattagok és metódusok ismétlődése problémákat
okozhat:
– pazarlás
– metódusoknál biztosítani kell az azonos működést
– a módosításokat több helyen át kell vezetni.
A megoldás: öröklődés
![Page 9: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/9.jpg)
B IT MAN89/9
Öröklődés
A közös adatok és metódusok egy ős osztályba
gyűjthetők.
Ennek neve legyen NeptunFelhasznaló
Az egyes felhasználó osztályok ezek leszármazottjaiként
deklarálhatók.
A leszármazottak öröklik a közös tagokat.
Ezzel kód megosztás jön létre: a leszármazottak
használhatják a szülő osztály metódusait.
![Page 10: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/10.jpg)
B IT MAN89/10
Öröklődés
Az öröklődés jele:
A nyíl a leszármazott osztály felől az ősosztály felé mutat
![Page 11: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/11.jpg)
B IT MAN89/11
Öröklődés
Jellemzői:
– Egyszeres öröklés: egy gyermeknek csak egy szülője
lehet. (C++-ban többszörös)
– Egy szülőnek több gyermeke lehet
– Egy gyermek szintén lehet szülő
– Egyetlen korlátozás: egy osztály még közvetett módon
sem lehet saját maga őse
Elnevezések:
– Ősosztály, szülő (super class, base class)
– Leszármazott, gyermek (subclass, derivered class)
![Page 12: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/12.jpg)
B IT MAN89/12
Öröklődés
Megadása:
– Ha nem adunk meg szülő osztályt, akkor automatikusan a
java.lang.Object osztály a szülő.
– Az Object tehát minden osztály őse, tagjait minden
osztály örökli!
– A gyermek osztály örökli szülője tagjait, de:
• a private tagokhoz nem fér hozzá,
• a félnyilvános tagokhoz pedig csak akkor, ha
ugyanabban a csomagban van (ezeket a szülő osztály
hozzáférhető tagjainak segítségével kezelheti)
• a protected, public tagokhoz közvetlenül hozzáfér.
class osztálynév extends ősosztály {
…
}
![Page 13: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/13.jpg)
B IT MAN89/13
Konstruktorok az öröklődés során
A konstruktor nem öröklődik. Mind az ős osztály, mind a
leszármazott osztály rendelkezhet konstruktorral (akár többel
is). Egy leszármazott objektum példányosításánál tisztázni
kell:
– A konstruktorok végrehajtási sorrendjét
– Azt, hogy hogyan választhatjuk ki az ősosztály
konstruktorai közül a végrehajtandót
Végrehajtási sorrend: először mindig az ősosztály, majd a
leszármazott osztály konstruktora hajtódik végre. A pontos
sorrend:
– Az ős osztály adattagjainak inicializálása
– Az ős osztály konstruktorának végrehajtódása
– A gyermek osztály adattagjainak inicalizálása
– A gyermek osztály konstruktorának végrehajtódása
![Page 14: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/14.jpg)
B IT MAN89/14
Konstruktorok az öröklődés során
Az ős osztály konstruktorának kijelölése:
– A gyermek osztály első sorában szerepelhet egy
super(paraméterek) konstruktorhívás. A paraméterlistának
az ős osztály valamelyik konstruktorára illeszkednie kell.
– Ha ilyen hívás nem szerepel a gyermek osztály
konstruktorában, akkor egy implicit super() hívással
kezdődik a konstruktor végrehajtása.
– Következmények:
• ha a gyermek osztálynak van olyan konstruktora,
amelyben nincs explicit ős konstruktor hívás, a szülő
osztálynak kell legyen paraméter nélküli konstruktora.
• Ha a gyermek osztálynak csak implicit konstruktora
van, az is az ős osztály paraméter nélküli konstruktorát
hívja meg.
![Page 15: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/15.jpg)
B IT MAN89/15
public class Szemely {String nev;int kor;
public Szemely(String nev, int kor){this.nev = nev;this.kor = kor;
}public Szemely(){
this("Kis Béla", 25);}
}
public class Dolgozo extends Szemely {String munkakor;int fizetes;
public Dolgozo(String munkakor,int fizetes){super();this.munkakor = munkakor;this.fizetes = fizetes;
}}
Dolgozo d = new Dolgozo("tanár", 550);
1
2
3
4
![Page 16: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/16.jpg)
B IT MAN89/16
public class Szemely {String nev;int kor;
}
public class Dolgozo extends Szemely {String munkakor;int fizetes;
public Dolgozo(String munkakor,int fizetes){this.munkakor = munkakor;this.fizetes = fizetes;
}}
Dolgozo d = new Dolgozo("tanár", 550);
1
2
Szemely(){
nev = null;
kor = 0;
}Szemely() ?? NO! 3
4
Konstruktorok az öröklődés során
![Page 17: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/17.jpg)
B IT MAN89/17
public class Szemely {String nev;int kor;
public Szemely(String nev, int kor){this.nev = nev;this.kor = kor;
}} Szemely() ?? NO! 2
public class Dolgozo extends Szemely {String munkakor;int fizetes;
public Dolgozo(String munkakor,int fizetes){this.munkakor = munkakor;this.fizetes = fizetes;
}}
1
Konstruktorok az öröklődés során
![Page 18: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/18.jpg)
B IT MAN89/18
public class Szemely {String nev;int kor;
{nev = "Kis Béla"; kor = 25;}public Szemely(String nev, int kor){
this.nev = nev;this.kor = kor;
}}
2
public class Dolgozo extends Szemely {String munkakor;int fizetes;
public Dolgozo(String munkakor,int fizetes){this.munkakor = munkakor;this.fizetes = fizetes;
}}
1
Konstruktorok az öröklődés során
1. Adattagok deklarálása
2. Inicializálás
3. Konstruktor végrehajtás
4. A változó referenciájának
beállítása
Szemely() ?? NO!
![Page 19: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/19.jpg)
B IT MAN89/19
Öröklődés
Adattagok öröklése:
– A leszármazott örökli az összes adattagot, és új
adattagokat is definiálhat
– Definiálhat egy örökölt adattaggal megegyező nevű
adattagot is, ilyenkor az örökölt tagot elrejti (hide)
– Az elrejtett tagra a super kulcsszóval hivatkozhatunk:
• super.adattag
• super.super.adattag hívás nem lehetséges!
![Page 20: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/20.jpg)
B IT MAN89/20
public class Szemely {String nev;int fizetes;
public Szemely(String nev, int fizetes){this.nev = nev;this.fizetes = fizetes;
}}
public class Dolgozo extends Szemely {int fizetes;
public Dolgozo(String nev, int fiz1, int fiz2){super(nev, fiz1);fizetes = fiz2;
}} public class OuterP {
public static void main(String args[]) {Dolgozo d = new Dolgozo("Béla", 550, 200);System.out.println(d.nev+" - "+d.fizetes);Szemely sz = d;System.out.println(sz.nev+" - "+sz.fizetes);
}}
Adattagok
öröklődéskor
![Page 21: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/21.jpg)
B IT MAN89/21
public class Szemely {String nev;int fizetes;
public Szemely(String nev, int fizetes){this.nev = nev;this.fizetes = fizetes;
}}
public class Dolgozo extends Szemely {int fizetes;
public Dolgozo(String nev, int fiz1, int fiz2){super(nev, fiz1);fizetes = fiz2;
}public int getSzemFiz(){
return super.fizetes;}
} public static void main(String args[]) {Dolgozo d = new Dolgozo("Béla", 550, 200);System.out.println(d.nev+" - "+d.fizetes);System.out.println(d.getSzemFiz());
}
Adattagok
öröklődéskor
![Page 22: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/22.jpg)
B IT MAN89/22
Öröklődés
Metódusok öröklése
– A leszármazott örökli az összes nem private metódust és
újakat is definiálhat, valamint megváltoztathat örökölt
metódust
– Esetek:
1. Új metódus: Az örökölt metódusoktól eltérő nevű
metódus definiálása
2. Új metódus örökölt metódus túlterhelésével
(overloading): az egyik örökölt metódussal
megegyezik a név, de eltér a paraméter szignatúra.
3. Példányszintű metódus felüldefiniálása (override): az
egyik örökölt példányszintű metódussal megegyezik a
szignatúra és a visszatérési érték típus
Paraméter szignatúra: A formális paraméterek száma és típus-sorrendje.
A visszatérési érték típusa ebből a szempontból közömbös.
![Page 23: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/23.jpg)
B IT MAN89/23
Öröklődés
– Metódusok öröklése – Esetek (folytatás):
4. Örökölt metódus elrejtése új metódussal (hide): az
örökölt osztályszintű metódussal megegyező
szignatúra és visszatérési érték.
5. Hibás definiálás:
– Az örökölt metódustól gyengébb hatáskörű metódus
(private < félnyilvános < protected < public)
– Az örökölt metódussal azonos szignatúrájú de eltérő
visszatérési értékű metódus (hibás felüldefiniálás vagy
elrejtés)
– Az örökölt osztályszintű metódussal azonos szignatúrájú
példányszintű metódus
– Az örökölt példányszintű metódussal azonos
szignatúrájú osztályszintű metódus
– final módosítójú metódussal azonos szignatúrájú
metódus
![Page 24: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/24.jpg)
B IT MAN89/24
Öröklődés
Egy osztályhoz több metódus is tartozhat azonos névvel, de
különböző paraméterszignatúrával.
A metódus hívásakor a fordítóprogram az aktuális
paraméterek szignatúrája alapján dönti el, hogy melyik
metódust kell alkalmaznia.
Ha egy megfelelőt sem talál, vagy ha többet is talál
hibajelzést ad.
Egy osztályhoz úgy tartozhat több azonos nevű metódus,
hogy:
– az osztályban definiálhatók azonos nevű metódusok
– ugyanilyen nevű metódusokat örökölhet is az osztály
A saját és örökölt metódusok együttesére érvényes az
overloading szabályrendszere
![Page 25: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/25.jpg)
B IT MAN89/25
Metódusnév túlterhelés
public class Szemely {String név;int fizetés;
int getFizetés(){return fizetés;
}void fizetéstEmel(int fizetés){
this.fizetés += fizetés;}
}
public class Alkalmazott extends Szemely {String beosztás;
void fizetéstEmel(){fizetés += 20000;
}void fizetéstEmel(Alkalmazott a){
if (a.getFizetés() > fizetés) fizetés = a.getFizetés();
}}
Az Alkalmazott osztályban a fizetéstEmel metódus három különböző
paraméterszignatúrával is használható.
![Page 26: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/26.jpg)
B IT MAN89/26
Metódusnév felüldefiniálás
public class Alkalmazott {String név;int nyelvekSzama;
public int potlek() {return nyelvekSzama*20000;
}}
public class Fonok extends Alkalmazott {int beosztottakSzama;
public int potlek() {return super.potlek() + beosztottakSzama*10000;
}}
Az ősosztály potlek() metódusának meghívása
![Page 27: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/27.jpg)
B IT MAN89/27
Teszt 1.
Helyes vagy hibás az alábbi kód?
public class Komplex {
int x, y, z;
Komplex(int x, int y, int z){
this(x, y, z);
}
}
![Page 28: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/28.jpg)
B IT MAN89/28
Teszt 2.
Az adatok láthatóságát szűkíthetjük
Az ősosztály adatait felüldefiniálhatjuk
Új metódusokat deklarálhatunk
Az ős osztály metódusait felüldefiniálhatjuk
Mire van lehetőségünk az utód osztályban egy
osztály örökítésekor?
![Page 29: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/29.jpg)
B IT MAN89/29
Teszt 3.
Névegyezőség esetén egy konstruktorban milyen
minősítővel hivatkozhatunk az osztály adattagjaira?
this()
super.
super()
this.
![Page 30: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/30.jpg)
B IT MAN89/30
Teszt 4.
Mi a konstruktor?
Osztályt definiáló metódus
Öröklődést beállító metódus
Objektumot létrehozó metódus
Példányosításkor meghívódó metódus
![Page 31: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/31.jpg)
B IT MAN89/31
Teszt 5.
Milyen típusú konstruktor van az osztályban?
public class Alma {
String nev;
Alma (){
}
}
Implicit
Explicit
![Page 32: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/32.jpg)
B IT MAN89/32
A kötés (binding) fogalma
A fordítóprogram elsődleges feladata, hogy az általunk
megírt forráskódot elolvassa, elemezze, megértse. Ezen
elemzés közben listát vezet a kód olvasása során
felismert változókról, konstansokról, típusokról,
függvényekről. Az egyes programozási elemekhez
rendelt nevek alapján képes felismerni melyik
programsorban melyik, korábban definiált elemre
hivatkozunk.
Kötés-nek nevezzük azt a folyamatot, amikor a
fordítóprogram a forráskód fordítása során felfedezett
metódushívásokhoz konkrét metódust rendel.
![Page 33: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/33.jpg)
B IT MAN89/33
A kötés (binding) fogalma
A fordítóprogram elsődleges feladata, hogy az általunk
megírt forráskódot elolvassa, elemezze, megértse. Ezen
elemzés közben listát vezet a kód olvasása során
felismert változókról, konstansokról, típusokról,
függvényekről. Az egyes programozási elemekhez
rendelt nevek alapján képes felismerni melyik
programsorban melyik, korábban definiált elemre
hivatkozunk.
Kötés-nek nevezzük azt a folyamatot, amikor a
fordítóprogram a forráskód fordítása során felfedezett
metódushívásokhoz konkrét metódust rendel.
![Page 34: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/34.jpg)
B IT MAN89/34
A kötés (binding) fogalma
A kötés típusai:
– Korai kötés: a fordítóprogram egy objektum statikus
típusa, vagy az aktuális paraméterek statikus típusa
alapján az azonosítást egyértelműen el tudja végezni.
• Egyedi metódusnevek
• Egy osztályon belül azonos nevű függvények, eltérő
paraméter szignatúrával.
– Késői kötés: a fordítóprogram az azonosítást nem tudja
elvégezni, a kötés csak futásidőben jöhet létre:
• Felüldefiniált metódusok, ahol metódus hívásánál dön-
teni kell, hogy az örökölt vagy a saját változat hívódjon
meg. A döntés alapja a hivatkozás dinamikus típusa.
• Mivel a dinamikus típus fordítási időben nem ismert, a
felüldefiniált metódusok közötti választást futásidőre
kell halasztani.
![Page 35: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/35.jpg)
B IT MAN89/35
Statikus és dinamikus típus
Egy változónak van statikus és dinamikus típusa.
Egy változó statikus típusa az, amelyet a
deklarációjában megadtunk
– Ez a változó teljes élete alatt változatlan
– Ez határozza meg, hogy milyen műveleteket
végezhetünk a referenciával hivatkozott objektummal
Egy változó dinamikus típusa az általa éppen hivatkozott
objektum tényleges típusa.
– Csak olyan típus lehet, amely rendelkezik ugyanazokkal
az adatokkal és műveletekkel, mint a statikus típus, ezért a
változó dinamikus típusa csak a statikus típus vagy annak
leszármazottja lehet.
– A dinamikus típus a program futása során bármikor
változhat
![Page 36: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/36.jpg)
B IT MAN89/36
Statikus és dinamikus típus
Egyszerű példa: miből mi lehet?
Gyümölcs a, b;
a = new Alma("Jonatán");
b = new Gyümölcs("Kiwi");
a = b;
a = new Körte("Vilmos");
Körte
Gyümölcs
Alma
Deklarálás
Statikus
értékadás
típus név érték
Gyümölcs a Alma Jonatán
Gyümölcs a
Példányosítás
Dinamikus
értékadás
Gyümölcs b
Gyümölcs b Gyümölcs Kiwi
Gyümölcs a Gyümölcs Kiwi
Értékadás
Dinamikus
értékváltás
Egy gyümölcs példány
lehet Gyümölcs, Alma,
vagy Körte típusú.
Alma példány csak
Alma típusú lehet.
Körte példány csak
Körte típusú lehet.Gyümölcs a Körte Vilmos
Újra
példányosítás
Dinamikus
értékadás
![Page 37: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/37.jpg)
B IT MAN89/37
Statikus és dinamikus típus
Mi történik?
Gyümölcs a = new Körte("Vilmos");
Körte c = new Körte("Vilmos");
a = c;
c = a;
Körte
Gyümölcs
Alma
típus név érték
Körte c Körte Vilmos
Egy gyümölcs példány
lehet Gyümölcs, Alma,
vagy Körte típusú.
Alma példány csak
Alma típusú lehet.
Körte példány csak
Körte típusú lehet.
Gyümölcs a Körte Vilmos
A Gyümölcs típusú statikus változóba
berakunk egy Körte típusú statikus változót!
Működik? Igen, mert a Gyümölcs lehet Körte
A Körte típusú statikus változóba beraknánk
egy Gyümölcs típusú statikus változót!
Működik? Nem, mert a Körte csak Körte
lehet!
Értékadáskor változik a referencia (a dinamikus típus), de csak
olyan érték adható át, amelynek a statikus típusa megfelelő!
![Page 38: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/38.jpg)
B IT MAN89/38
Statikus és dinamikus típus
Mi történik?
Gyümölcs a = new Körte("Vilmos");
Körte c = new Körte("Vilmos");
c = (Körte)a;
Körte
Gyümölcs
Alma
típus név érték
Körte c Körte Vilmos
Egy gyümölcs példány
lehet Gyümölcs, Alma,
vagy Körte típusú.
Alma példány csak
Alma típusú lehet.
Körte példány csak
Körte típusú lehet.
Gyümölcs a Körte Vilmos
Ha értékadáskor a jobb oldalon álló dinamikus típus
megegyezik a bal oldalon álló statikus típussal, akkor
konvertálással megoldható az értékadás.
Értékadáskor változik a referencia (a dinamikus típus), de csak
olyan érték adható át, amelynek a statikus típusa megfelelő!
![Page 39: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/39.jpg)
B IT MAN89/39
Típuskonverzió referenciákra
Automatikus konverzió:
– Akkor lehetséges, ha a konvertálandó statikus típusa
azonos típus az eredmény statikus típusával vagy annak
leszármazottja. (Biztos, hogy a konvertálandó dinamikus
típusa is leszármazott vagy ugyanaz.)
Kikényszerített konverzió:
– Akkor alkalmazható, ha a konvertálandó statikus típusa
nem azonos vagy nem leszármazottja az eredmény
statikus típusának, de a dinamikus típusa igen.
– Az instanceof operátor a referencia dinamikus típusát
vizsgálja, segítségével megvizsgálhatjuk a konverzió előtt,
hogy végbemehet-e a konverzió.
Gyümölcs a = new Körte("Vilmos");
Körte c = new Körte("Vilmos");
System.out.println(a instanceof Körte); true
Gyümölcs a = new Körte("Vilmos");
![Page 40: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/40.jpg)
B IT MAN89/40
s
![Page 41: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/41.jpg)
B IT MAN89/41
A final minősítésű adattagok
A final minősítő többféle célra is használható a Java
nyelvben. Jelentése mindig "valami olyasmi, ami később nem
változtatható meg".
Final adattagok:
– Deklaráció: final típus azonosító=inicializáló_kifejezés;
– Az inicializáló kifejezés csak olyan elemeket tartalmazhat,
amelyek az addigi deklarációk ismeretében
feldolgozhatók.
public class Fém {String név;final double tömeg;
Fém(String név, double tömeg){this.név = név;this.tömeg = tömeg;
}}
‒ Miden példányosítás során
végrehajtódik, tehát a változó
értéke objektumként egyedi
lehet.
‒ Egyetlen metódus sem
változtathatja meg az értékét.
![Page 42: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/42.jpg)
B IT MAN89/42
A final minősítésű adattagok
Static final adattagok:
– deklaráció:
• static final típus azonosító = inicializáló_kifejezés;
– Az inicializáló kifejezések csak konstansokat és olyan
static adattagokat tartalmazhat, amelyek már deklaráltak.
– Csak egyszer, az osztály inicializálása során hajtódik
végre, tehát a változó értéke az osztály miden példánya
számára ugyanaz.
– Egyetlen metódus sem változtathatja meg az értékét.
public class Személy {String név;static final int minimálbér = 185000;
}
![Page 43: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/43.jpg)
B IT MAN89/43
A final minősítésű metódusok
Final metódus:
– Egy metódus is kaphat final minősítést.
– A final minősítésű metódust nem definiálhatja felül
egyetlen leszármazott osztály sem.
– Szerepe, hogy megakadályozza bizonyos viselkedés
formák megváltoztatását, ha az veszélyezteti a helyes
működését.
public class Kör {int sugár;
final double terület(){return sugár*sugár*Math.PI;
}}
![Page 44: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/44.jpg)
B IT MAN89/44
Absztrakt metódus és osztály
Gyakran előfordul a tervezés során, hogy egy osztály szintjén
tudjuk, hogy valamilyen metódus szükséges lesz a
leszármazottakban, de még nem lehet megadni az
implementációját.
Ezért a Java nyelv megengedi törzs nélküli metódus
definiálását.
Az ilyen metódust az abstract minősítővel kell ellátni.
Ha az osztály tartalmaz absztrakt metódust, az osztályt is az
abstract minősítővel kell ellátni.
abstract class Termek{private String nev;
Termek(String nev){this.nev = new String(nev);
}abstract void kiir();
}
![Page 45: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/45.jpg)
B IT MAN89/45
Absztrakt metódus és osztály
Az absztrakt metódusokra vonatkozó szabályok:
Absztrakt egy metódus, ha nincs törzse, megvalósítást csak a
felüldefiniálás során kap.
Absztrakt metódusnak nem lehet a módosítója a private, final,
static hiszen az ilyen módosítókkal ellátott metódusokat nem
lehet felüldefiniálni!
Absztrakt egy osztály, ha van legalább egy absztrakt metódusa
Absztrakt osztályt nem lehet példányosítani
Egy absztrakt osztály arra szolgál, hogy ős osztálya legyen további
osztályoknak
A leszármazott osztály(ok) feladata az absztrakt metódusok
felüldefiniálása
Absztrakt osztály gyermeke lehet absztrakt, ha nem minden
absztrakt metódust valósít meg
Az absztrakt osztály is használható referencia statikus típusaként
![Page 46: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/46.jpg)
B IT MAN89/46
Absztrakt metódus és osztály
Az absztrakt metódusok szerepe: rögzít egy tervezési
döntést (szükséges metódusok halmaza), kényszeríti a
leszármazott osztály(ok) programozóját az így
meghatározott metódusok definiálására.
Hibalehetőségek:
– törzs nélküli metódus, abstract minősítő nélkül,
– absztrakt metódust tartalmazó osztály abstract minősítő
nélkül.
![Page 47: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/47.jpg)
B IT MAN89/47
Teszt 6.
static
final
void
private
abstract
Mely kulcsszavak szerepelnek egy visszatérési
értékkel nem rendelkező, a leszármazott osztályban
felülírható, védett példánymetódus fejében?
![Page 48: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/48.jpg)
B IT MAN89/48
Teszt 7.
public
private
abstract
final
static
extends
Mely kulcsszók szerepelhetnek egy osztálydefiníció
fejrészében?
![Page 49: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/49.jpg)
B IT MAN89/49
Teszt 8.
Helyes vagy hibás az alábbi kód?
public abstract class Komplex {
int x, y, z;
abstarct Komplex(int x, int y, int z){
this.x = x;
this.y = y;
this.z = z;
}
}
![Page 50: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/50.jpg)
B IT MAN89/50
Interfész
Technikailag:
– Egy olyan osztályféle, amely csak absztrakt metódusokat
és konstansokat tartalmazhat, tehát nem példányosítható.
– Nem örökléssel használjuk fel mint az absztrakt
osztályokat, hanem implementálással.
– Implementálás: megvalósítjuk az interfészben deklarált
metódusokat.
– Egy osztály implementálhat tetszőleges számú interfészt.
Tervezésileg:
– Egy viselkedési leírás, amelyet egy osztály megvalósít.
– Lehetővé teszi, hogy ne egy konkrét megvalósításhoz
(osztályhoz), hanem viselkedéshez (interfész) kössünk
dolgokat.
![Page 51: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/51.jpg)
B IT MAN89/51
Interfész
Egy osztály interfészén a nyilvános elemeinek
összességét értjük, azokat, amelyek az osztály
megfelelő használatához szükségesek
Az információ rejtés elve miatt az interfész általában
csak metódusokból áll.
Szintaktikája hasonló az osztályhoz, de a class kulcsszó
helyett interface kulcsszót kell használni.
Az interfészt tartalmazó fájl nevének meg kell egyeznie a
kódban szereplő interfész névvel.
interface Nyomtathato{void nyomtat();
}
class Konyv implements Nyomtathato{String tartalom = "ABC";public void nyomtat(){
System.out.println(tartalom);}
}
![Page 52: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/52.jpg)
B IT MAN89/52
Interfész
Minden interfész automatikusan abstract, ezt
módosítóval jelezni nem kell.
Egy interfész kiterjeszthet más interfészeket (extends).
Létezik többszörös interfész öröklés.
Az interfész nem tartalmaz végrehajtható kódot, azt a
megvalósító osztályban (implements) kell megadni.
Konvenció, hogy az interfészek neve „I”-vel kezdődik.
[módosító] interface Iazonosító extends If1, If2 { [elemek deklarációja]
}
![Page 53: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/53.jpg)
B IT MAN89/53
Interfész
Interfész implementálása:
Szabályok:
Ha egy osztály implementál egy interfészt, akkor köteles
annak minden metódusát implementálni
Az implementált elemeket nem módosíthatja
Metódusok esetében a fejlécnek teljesen egyeznie kell
Azonos nevű elemet az öröklődés során és az implementálás
során nem kaphat meg
[módosító] class osztálynév implements If1, If2() { }
![Page 54: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/54.jpg)
B IT MAN89/54
Interfész
Tagok:
– Csak konstansai vagy abstract tagjai lehetnek.
• Konstans: automatikusan public static final módosítóval
rendelkeznek, de kiírhatók a módosítók.
• Metódusok: automatikusan public abstract módosítóval
rendelkeznek, a public kiírható, az abstract nem
ajánlott.
• Más módosítója nem lehet (pl. static, final, stb.).
Interfész használata:
– Egy interfész új referencia típust vezet be -> mindenhol
használható, ahol egy osztály.
– Változó deklarációban szerepelhet.
– Értékül minden olyan osztály objektumának felveheti a
referenciáját, amely megvalósítja az interfészt!
![Page 55: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/55.jpg)
B IT MAN89/55
Interfész – Példák
A ref;ref = new B(); //OK! ref = new C(); //OK! ref = new D(); //NO! Hibás!ref = new A(); //NO! Hibás!
A x = new B();System.out.println(ref instanceof A);System.out.println(ref instanceof C);
truetrue
public interface A { … }public class B implements A { … }public class C implements A { … }public class D { … }
![Page 56: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/56.jpg)
B IT MAN89/56
Interfész – Példák
I1 a = new A(); //OK! I2 b = new A(); //OK! a = b; //OK! Automatikus típuskonverzió
b = (I2)a; //OK! Kikényszerített típuskonverzió
A c = (A)a; //OK! Kikényszerített típuskonverzió
a = new B(); //OK! b = (I2)a; //NO! Hibás!
interface I1 {…}interface I2 extends I1 {…}class A implements I2 {…}class B implements I1 {…}
![Page 57: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/57.jpg)
B IT MAN89/57
Teszt 9.
Egy interfészben metódusfejeket és konstansokat
definiálhatunk.
Az interfész metódusai csak példánymetódusok
lehetnek
Egy interfésznek az osztályhoz hasonlóan csak egy
interfész őse lehet.
Az interfészekből példányok hozhatók létre,
akárcsak az osztályokból.
Jelölje meg az összes igaz állítást!
![Page 58: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/58.jpg)
B IT MAN89/58
Teszt 10.
Az adott a Base interfész mellett melyik kód fordul le?
interface Base { boolean m1 (); byte m2(short s);
}
abstract class Class2 implements Base {
public boolean m1() { return (7 > 4); }
}
interface Base2 implements Base { }
abstract class Class2 extends Base {
public boolean m1() { return true; }
}
class Class2 implements Base {
boolean m1() { return false; }
byte m2(short s) { return 42; }
}
![Page 59: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/59.jpg)
B IT MAN89/59
Generikus típusok, metódusok
B IT MAN
![Page 60: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/60.jpg)
B IT MAN89/60
Generikus típusok, metódusok
Általános jellegű, nem konkrét típust használó típusok,
metódusok definiálása.
– Tipikus példa: adattároló osztály
– Régebbi megoldás: Object referencia használata.
public class Tarolo {private Object object;
public void set(Object object) {this.object = object;
}public Object get() {
return object;}
}
![Page 61: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/61.jpg)
B IT MAN89/61
Generikus típusok, metódusok
A Tarolo osztályt egészek tárolására használjuk
– Véletlenül belekerül egy String
– Az eredeti típusos objektum visszakapásához castolni kell
– A program lefordul, a hiba csak futtatáskor derül ki!
public class TaroloPrg {public static void main(String args[]) {
Tarolo t = new Tarolo();
t.set(3);int i = (Integer)t.get();
t.set("Retek");int k = (Integer)t.get();
}}
c:\Java8>java TaroloPrg
Exception in thread "main" java.lang.ClassCastException: java.lang.String
cannot be cast to java.lang.Integer at TaroloPrg.main(TaroloPrg.java:7)
![Page 62: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/62.jpg)
B IT MAN89/62
Generikus típusok, metódusok
Megoldás: generikus "típussal paraméterezett típus"
használata
public class GenericTarolo<T> {private T t;
public void set(T t) {this.t = t;
}
public T get() {return t;
}}
Konvenció:
Paraméterként használt
típusok jelölése:
• E - Elemek
• K - Kulcs
• N - Szám
• T - Típus
• V - Érték
![Page 63: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/63.jpg)
B IT MAN89/63
Generikus típusok, metódusok
A GenericTarolo osztályt egészek tárolására használjuk
– Az adat közvetlenül kinyerhető, nincs cast!
– Véletlenül belekerül egy String, a hiba már fordításkor jelentkezik!
public class GTPrg {public static void main(String args[]) {
GenericTarolo<Integer> gt = new GenericTarolo<Integer>();gt.set(3);int i = gt.get();gt.set("Retek");
}}
c:\Java8>javac -d . GTPrg.java
GTPrg.java:5: set(java.lang.Integer) in GenericTarolo<java.lang.Integer>
cannot be applied to (java.lang.String)
gt.set("Retek");
^
![Page 64: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/64.jpg)
B IT MAN89/64
Generikus típusok, metódusok
public class GenArray {
public static <E> void printArray(E[] inputArray) {for(E elem : inputArray)
System.out.printf("%s ", elem);System.out.println(); //üres elválasztó sor kiírása
}
public static void main(String args[]) {Integer[] intArray = { 1, 2, 3, 4, 5 };Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
System.out.println("Az egész típusú tömb tartalma:");printArray(intArray);
System.out.println("\nA valós típusú tömb tartalma:");printArray(doubleArray);
System.out.println("\nA karakter típusú tömb tartalma:");printArray(charArray);
}}
![Page 65: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/65.jpg)
B IT MAN89/65
Hibakezelés
![Page 66: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/66.jpg)
B IT MAN89/66
Hiba, biztonságos program
Szintaktikai hiba
Szemantikai hiba
Biztonságos program
A szemantikai hibákat megpróbálja lekezelni a belőlük
következő hibákkal együtt
Ennek módja: kivételkezelés
imt i = 0;system.out.Println('alma');for (int i = 0, i<= 10, i++)...
int a=0, b=10/a;x1=(-b+Math.sqrt(b*b-4*a*c))/2*a;args[++i]
![Page 67: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/67.jpg)
B IT MAN89/67
Kivételkezelés
Fogalma: A hibakezelés egy formája, amelyben
elválasztható a hibalekezelő kódrészlet a normál
működés kódjától, valamint a jelezhetjük a kódunkban
előforduló hibákat és előírhatjuk kezelésüket a kódunkat
használó kód számára.
Kivételek keletkezése
– Kivétel létrejöhet egy végrehajtás során előforduló hiba
hatására (I/O hiba, tömbindex túllépés, stb.), valamint saját
magunk is létrehozhatunk kivételeket.
– A kivétel létrejöttét a kivétel megdobódásának nevezzük.
– A kivétel elkapását a kivétel lekezelésének nevezzük.
![Page 68: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/68.jpg)
B IT MAN89/68
Kivételkezelés
Kivételek: Javaban a kivételek objektumok.
A kivétel osztályok az Exception osztály leszármazottai
Fajtái:
– Kötelezően lekezelendő kivételek: a fordító ellenőrzi, hogy
ezeket lekezeljük-e. Például az I/O műveletek során
előforduló kivételek.
– Nem kötelezően lekezelendő kivételek: nem kötelező
lekezelni. Ezek a RuntimeException leszármazottai, ami
viszont az Exception leszármazottja. Például a null
referencia hiba, tömb index túllépés, stb.
– A saját kivételosztályokat ez alapján vagy az Exception
osztályból származtatjuk (közvetve, közvetlenül) (ekkor
kötelező lekezelni) vagy a RuntimeException-ból (ekkor
nem kötelező lekezelni).
![Page 69: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/69.jpg)
B IT MAN89/69
Kivételosztályok – néhány fontosabb
Ellenőrzött kivételek
Nem ellenőrzött kivételek
IOException Ki- és bemeneti hibák esetén váltódik ki, pl. konzolról való
beolvasáskor.
FileNotFoundException Az IOException egyik alkivételosztálya. Akkor kapjuk például, ha nem
létező fájlba próbálunk írni.
EOFException Fájl végét jelző kivétel. Szintén az IOException alosztálya.
RuntimeException Valamennyi futásidejű kivétel ősosztálya.
NullPointerException Olyan esetben kapjuk, ha null értékű, azaz inicializálatlan változóra
vagy objektumra hivatkozunk.
IndexOutOfBoundsExcep-
tion
Túlindexelést jelző kivétel. Akkor kapjuk, ha egy tömb, karakterlánc,
vagy más indexelhető szerkezet nem létező indexére hivatkozunk.
ArithmeticException Aritmetikai műveletek hibájakor kapjuk, például nullával való osztáskor.
NumberFormatException Akkor kapjuk például, ha nem megfelelő számot tartalmazó
karakterláncot próbálunk szám típusúvá konvertálni.
IllegalArgumentExcep-
tion
Akkor váltódik ki, ha egy metódust nem megfelelő paraméterekkel
hívunk.
![Page 70: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/70.jpg)
B IT MAN89/70
Kivételkezelés
A védett kódot try blokkban helyezzük el:
try { utasítások }
Az első kivételt kiváltó utasítással befejeződik a try blokk
végrehajtása, létrejön egy kivétel objektum. Fontos: a try
blokk kivételt kiváltó utasítása utáni utasítások tehát
mindig kimaradnak!
try {
kód, ami kiválthat egy kivételtX
} catch ( ) {Kivétel típusa Azonosító
további utasítások
![Page 71: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/71.jpg)
B IT MAN89/71
Kivételkezelés
A kivétel lekezelését szolgáló utasítások catch
blok(kok)ban helyezkednek el.
catch (típus, azonosító) { utasítások }
A catch minden esetben a try blokkot követi, nem lehet
köztük más utasítás.
Egy try blokkhoz tartozhat több catch is. Mindig a
szűkebb kivételt követi a bővebb kivétel lekezelése.
} catch ( ) {
kód, ami a kivétel kiváltódásakor lefut
Kivétel típusa Azonosító
}
} catch ( ) {
kód, ami a kivétel kiváltódásakor lefut
Kivétel típusa Azonosító
![Page 72: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/72.jpg)
B IT MAN89/72
Kivételkezelés
finally: A cacth(ek) után szerepelhet. Az utolsó catch
blokk és a finally blokk között nem lehet más utasítás.
Minden esetben lefut:
– Ha kivétel keletkezett a try blokkban, egy catch blokk
végrehajtása után.
– Ha nem volt kivétel, a try blokk utolsó utasítása után.
} finally {
} catch ( ) {
kód, ami a kivétel kiváltódásakor lefut
Kivétel típusa Azonosító
try {
kód, ami kiválthat egy kivételtX
kód, ami mindig lefut}
![Page 73: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/73.jpg)
B IT MAN89/73
Kód belépési pont
try {
kód, ami kiválthat egy kivételtX
} catch ( ) {
kód, ami a kivétel kiváltódásakor lefut
Kivétel típusa Azonosító
Kód kilépési pont
} finally {
kód, ami mindig lefut}
Kód végrehajtás
kivétel esetén
Kód végrehajtás
hibamentes
esetben
![Page 74: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/74.jpg)
B IT MAN89/74
Kivételkezelés
A Java kivételkezelése nyitott, ami azt jelenti, hogy bárki
létrehozhat saját névvel és funkcionalitással ellátott
kivételosztályokat, amelyeket célszerű az Exception
osztályból származtatni. Az új kivételosztályok nevében
célszerű az "Exception" szót is szerepeltetni, hogy
utaljon annak szerepére.
Kivétel dobása (throw utasítás)
– throw kivételobjektumref;
• pl: throw new IOException("Hiba van");
– throw sajátKivételosztályNév("Saját hibaüzenet");
![Page 75: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/75.jpg)
B IT MAN89/75
Kitérő – verem adatszerkezet
Verem:
– Verem esetén azt az elemet vehetjük ki legelőször,
amelyiket utoljára tettük be. Működési módja miatt LIFO
(last in first out) adatszerkezetnek nevezik.
– Műveletek: berakás, kivétel
A
B
C
C, B, A A, B, C
Berak Kivesz
3. 2. 1. 3. 2. 1.
![Page 76: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/76.jpg)
B IT MAN89/76
Kivételkezelés – Példa
public class Verem_Exception extends Exception {
public Verem_Exception(String hibauzenet){super(hibauzenet);
}}
Készítsünk egy komplett verem kezelő alkalmazást
– Ha a verembe nem lehet betenni, vagy nem lehet belőle
kivenni adatot, használjunk hibakezelést
– A hibakezeléshez írjunk saját hiba osztályt
![Page 77: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/77.jpg)
B IT MAN89/77
Kivételkezelés – Példa
public class Verem{private final static int MERET = 3;private int[] verem = new int[MERET];private int mutato = 0;
public void betesz(int i) throws Verem_Exception {if (mutato < MERET) {
verem[mutato] = i;System.out.println("A szám: ("+i+") a verembe helyezve!");mutato++;
} elsethrow new Verem_Exception("A verem megtelt!");
}
public int kivesz() throws Verem_Exception {if (mutato == 0)
throw new Verem_Exception("A verem üres!");mutato--;int i = verem[mutato];System.out.println("A szám: ("+i+") a veremből kivéve!");return i;
}}
![Page 78: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/78.jpg)
B IT MAN89/78
public class VeremPrg{public static void main(String args[]) {
Verem v = new Verem();try {
v.betesz(21);v.betesz(52);v.betesz(77);v.betesz(99);
} catch (Verem_Exception ve) {System.err.println(ve);
}
System.out.println();try {
v.kivesz();v.kivesz();v.kivesz();v.kivesz();
} catch (Verem_Exception ve) {System.err.println(ve);
}}
}
![Page 79: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/79.jpg)
B IT MAN89/79
Kivételkezelés
Kivétel terjedése
– A kivétel nem képes tovább terjedni egy metódusblokkból,
hacsak a metódus fejlécében nincs megadva a kivétel
típusa vagy annak őse.
– Ha egy metódus fejlécében kötelezően lekezelendő
kivételtípus van megadva, akkor a hívását kötelező olyan
try utasításba ágyazni (közvetlenül vagy közvetve), amelyik
lekezeli a kivételtípust.
– Mivel a catch blokkok keresése sorban történik mindig
előbbre kell írni azt a catch blokkot, amelyik egy
leszármazott típust kap el és csak utána azt, amelyik az őst.
– A utolsó catch blokként lehet írni egy Exception-t elkapót,
hiszen az minden kivételt képes elkapni.
![Page 80: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/80.jpg)
B IT MAN89/80
Teszt 11.
Helyes vagy hibás az alábbi kód?
public class Teszt {
public static void main(String args[ ]) {
int x = new int(5);
}
}
Miért?
Helyes
Hibás
![Page 81: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/81.jpg)
B IT MAN89/81
Teszt 12.
Mit ír ki a kód?
public class SuperClass {
int i, j;
SuperClass(int i, int j) {
this.i = i;
this.j = j;
}
SuperClass() {
this(2, 3);
}
}
public class Program extends SuperClass {
public Program() {
System.out.println(i + j);
}
public static void main(String[ ] args) {
new Program();
}
}
0
5
null
Szintaktikailag hibás, így
nem fut le a kód.
![Page 82: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/82.jpg)
B IT MAN89/82
Teszt 13.
Egy konstruktorból meghívható az osztály egy
másik konstruktora.
Egy objektum létrehozásakor az öröklési ág minden
osztályának lefut legalább egy konstruktora.
Ha a konstruktor első sorában nem szerepel this()
vagy super() hívás, akkor futási hiba keletkezhet
Az osztályadatokat csak a konstruktorban lehet
inicializálni.
A konstruktor a leszármaztatott osztályban
felüldefiniálható
Jelölje meg az összes igaz állítást!
![Page 83: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/83.jpg)
B IT MAN89/83
Teszt 14.
Milyen típusú kivételt dob a parseInt() metódus, ha
illegális adatot kap?
NumberFormatError
NumberException
NumberFormatException
ArithmetricException
![Page 84: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/84.jpg)
B IT MAN89/84
Teszt 15.
Helyes vagy hibás az alábbi kód?
public class Fut {public static void main(String[] args) {
try {} finally {
System.out.println("BB");}
}}
Helyes
Hibás
![Page 85: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/85.jpg)
B IT MAN89/85
Teszt 16.
Helyes vagy hibás az alábbi kód?
public class Fut {public static void main(String[] args) {try {
System.out.println("BB");} catch (Exception e) {
System.out.println(e.getMessage());} catch (ArithmeticException a) {
System.out.println(a.getMessage());}
}}
Helyes
Hibás
![Page 86: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/86.jpg)
B IT MAN89/86
Teszt 17.
Az alábbi kód egy A.java nevű fájlban van. Mi történik, ha
megpróbáljuk lefordítani?
public class A { public void m1() {System.out.print("A.m1,");} protected void m2() {System.out.print("A.m2,");} private void m3() {System.out.print("A.m3,");} void m4() {System.out.print("A.m4,");}
} class B {
public static void main(String[] args) { A a = new A(); a.m1(); a.m2(); a.m3(); a.m4();
} }
Lefordul, minden OK.
Nem fordul, mert egy fájlban csak egy
osztály lehet
Nem fordul, mert hiba van az A osztályban
Nem fordul, mert hiba van a B osztályban
![Page 87: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/87.jpg)
B IT MAN89/87
Teszt 18.
Az alábbi kód egy A.java nevű fájlban van. Lefordítjuk.
Hogyan indítjuk el a programot?
public class A { public void m1() {System.out.print("A.m1,");} protected void m2() {System.out.print("A.m2,");} public void m3() {System.out.print("A.m3,");} void m4() {System.out.print("A.m4,");}
} class B {
public static void main(String[] args) { A a = new A(); a.m1(); a.m2(); a.m3(); a.m4();
} }
Sehogy, csak az A osztály fordul le.
java A
java A.B
java B
![Page 88: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/88.jpg)
B IT MAN89/88
Ficsor Lajos elektronikus jegyzetei
Elek Tibor elektronikus jegyzetei
Fenyvesi Tibor, Szabó László elektronikus anyagai
www.tutorialspoint.com/java oldal anyagai
prog.hu oldal anyagai
Nyékiné G. Judit (szerk.): JAVA 2 útikalauz programozóknak,
ELTE TTK Hallgatói Alapítvány, Budapest, 1999
Daniel J. Berg, J. Steven Fritzinger: JAVA felsőfokon,WILEY,
1999
Joshua Bloch: Hatékony Java, 2008
Felhasznált irodalom
B IT MAN
![Page 89: Abstract Javaságok - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_04_OOP_TM.pdf · – Az Objecttehát minden osztály őse, tagjait minden osztály örökli!](https://reader036.fdocument.pub/reader036/viewer/2022070620/5e2ca53594896b6d554b177e/html5/thumbnails/89.jpg)
B IT MAN89/89
VÉGEVÉGE