Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek.

Hasonló előadás


Az előadások a következő témára: "Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek."— Előadás másolata:

1 Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek

2  egységbezárás és információ elrejtése (absztrakt adattípus) ◦ adatok és a rajtuk végzett műveletek egységbezárása  osztályok írása  öröklődés  polimorfizmus (többalakúság)

3  lényege: hasonló osztályokat ne kelljen újra létrehozni, hanem a már meglévő osztályt „klónozni”, majd módosítani (interfész újrafelhasználása) ◦ adattagok esetén: újak hozzáadása (a régiek is megmaradnak) ◦ metódusok esetén:  újak hozzáadása  meglevők felülírása (overriding)

4 Overriding (felüldefiniálás) Overloading  meglevő metódus a gyerekosztályban felülíródik  azonos a név és a paraméterlista  egy osztályon belül vannak a metódusok  a metódusok neve ugyanaz, de a paraméterlistáik különbözők

5 a fordítóprogram nem tudja, melyik konkrét operáció hívódik (örökölt vagy felüldefiniált)!  futás közben derül ki a konkrét típus alapján  kései kötés: Java-ban minden metódushívás ilyen az objektumokat őstípus alapján kezeljük  minden gyerek ős típusú is egyben, de visszafelé ez már nem igaz!  az ősosztály típusú objektumot váró metódus gyerekosztály típusút is kaphat

6  előnye: ◦ a kód nem függ a specifikus típusoktól ◦ utólag is lehet definiálni származtatottakat

7

8

9  Java: extends kulcsszó class SzármaztatottOsztály extends Ősosztály { // … }  az ősosztálytól örökölt privát adattagok részei lesznek a származtatott osztálynak, de csak a publikus getter/setter metódusokkal tudjuk őket elérni ◦ konstruktorból az ősosztály konstruktorának hívásával: super kulcsszó

10  this: hivatkozás az aktuális objektumra  super: hivatkozás az ősre  Pl.: ◦ this  hivatkozás az aktuális objektum egy konstruktorára  hivatkozás az aktuális objektumra kiíratáskor ◦ super  hivatkozás az ősosztály konstruktorára  hivatkozás az ősosztály valamely metódusára

11 Ősosztály: public class Allat{ private String fajnev; private int varhatoElettartam; public Allat(String fajnev, int vElettartam){ this.fajnev = fajnev; this.varhatoElettartam = vElettartam; }

12  Gyerekosztály: public class Hal extends Allat{ private int uszonyhossz; public Hal(String f, int v, int u){ super(f, v); uszonyhossz = u; } A hal a fajnév és a várható élettartam mellett egy uszonyhossz adattaggal is rendelkezik. Először az ősosztály konstruktorát hívjuk... …ezután inicializáljuk a hal osztályban deklarált új mezőket.

13  Java-ban minden osztály (a beépítettek és az általunk írtak is) implicit módon (automatikusan) az Object nevű beépített ősosztálytól származik  az Object biztosít néhány hasznos metódust, melyeket a származtatott osztályok felüldefiniálhatnak (method overriding) ◦ ezek közé tartozik a toString() metódus is

14 toString() lényege: amikor kiíratunk egy objektumot, akkor az milyen formában íródjon ki  ezt írhatjuk elő a toString() metódusban Pl.: public class Pont { private int x; private int y; public String toString() { return “x = ” + x + “, y = ” + y; }

15  ha ezután létrehozunk egy Pont típusú objektumot, és kiíratjuk azt: Pont p = new Pont(); System.out.println(p);  …akkor valójában a toString() metódus fog meghívódni (automatikusan) és az általa visszaadott érték (String) kerül kiíratásra: x = 0, y = 0

16  Superman.java (pub)  SMMain.java (pub)

17  az osztályokat szokás csomagokba rendezni, csoportosítani valamilyen szempont alapján  a forráskódban azt, hogy az adott osztály melyik csomagba tartozik, a következő módon jelöljük: package csomagnév; ◦ ennek az első nemkomment sorban kell lennie!  Pl.: package hu.akarmi.www; („fordított domain”- szerű elnevezés)  ha egy osztályt nem teszünk csomagba, akkor alapértelmezetten egy ún. default package-be kerül

18  egy adott csomagban lévő osztály használata: import csomagnév.OsztályNév;  egy adott csomagban lévő összes osztály használata: import csomagnév.*;  példák: ◦ import java.util.ArrayList; ◦ import java.util.*;

19 package myPackage; public class Ember { // … }  az Ember osztály használata: myPackage.Ember e1 = new myPackage.Ember(); VAGY: import myPackage.*;... Ember e1 = new Ember();

20  egyes csomagok osztályai automatikusan importálódnak a programunkba, anélkül hogy kérnénk az importálásukat ◦ ilyen a java.lang csomag összes osztálya ◦ a java.lang csomagban van például a Math osztály is, így ha beépített matematikai függvényeket szeretnénk használni, minden további nélkül használhatjuk a Math osztályt (semmit nem kell importálni)

21 a csomagnévbe a teljes elérési útvonal bele van kódolva a csomagokat a domain name alapján kell elnevezni, mégpedig annak megfordításából képezzük a csomag nevét:  Pl. inf.u-szeged.hu  hu.u_szeged.inf.Ember ennek megfelelő könyvtárszerkezetet is ki kell alakítani:  hu könyvtár,  azon belül u_szeged könyvtár,  abban inf könyvtár,  abban Ember.java

22  ha két csomagunk is van ugyanolyan nevű osztállyal, és mindkettőt használni szeretnénk (amíg nem használunk ilyet, addig nincs baj) explicite ki kell írni a csomag nevét az osztály elé ◦ Pl. myPackage.Ember e1 = new myPackage.Ember(); myOtherPackage.Ember e2 = new myOtherPackage.Ember();

23  import static csomagnév;  az összes osztály adattagjait elérhetem az osztálynév nélkül ◦ Pl. a Math.PI helyett PI (java.lang)

24  az Eclipse automatikusan elkészíti a könyvtárstruktúrát, amint létrehozunk egy ilyen nevű csomagot ◦ egyébként nekünk kell gondoskodni a megfelelő könyvtárak létrehozásáról!  amit nem teszünk csomagba, az a default package-be kerül

25  a csomagban levő legfelső könyvtár felett kell fordítani ◦ pl. javac hu\u_szeged\inf\Program.java  Futtatás ◦ pl. java hu.u_szeged.inf.Program

26  hu.u_szeged.inf.Seged.java  hu.u_szeged.inf.TombMaximum.java  DoubleTombMax1.java  DoubleTombMax2.java  hu.u_szeged.inf.DoubleTombMax3.java

27  pub: 5. gyakorlathoz tartozó feladat.txt

28

29  nem példányosítható (fordítási hiba, ha megpróbáljuk a példányosítást)  általánosítás: közös interfészt biztosít a leszármazottaknak abstract class Hangszer{ … }

30  csak deklarációja van, definíciója (törzse) nincs  leszármazott osztályokban fogjuk majd megvalósítani  pl.: abstract public void szolj(Hang);  ha egy osztálynak van legalább egy absztrakt metódusa, akkor az osztály is absztrakt  absztrakt metódus nem lehet private és final, hiszen úgy nem lenne értelme (nem lehetne megvalósítani/felüldefiniálni)

31  az interfész olyan osztály, amiben csak absztrakt metódus van  csak egy formát ad, implementáció nélkül interface Hangszer{ … }

32  metódusai: ◦ impliciten public és abstract mindegyik ◦ ahogy absztrakt osztálynál sem, úgy itt sem lehet private és final  implements kulcsszóval lehet „származtatni” (implementálni) belőle  több interfészt is implementálhatunk („többszörös öröklődés”, de nem igazi)

33 public class Zongora implements Hangszer{ … } public abstract class AlkoholosItal extends Ital implements Alkoholos{ … }

34  interfészek is származhatnak egymásból  1 interfésznek lehet több ősinterfésze  Az öröklődési hierarchiában nincsen minden interfésznek egy közös ősinterfésze (mint az Object az osztályoknál)

35  vizsgáljuk meg, hogy egy objektumpéldány az adott osztályba tartozik-e  instanceof kulcsszó public void kutyaE(Object o){ if (o instanceof Kutya){ System.out.println(”Ez egy kutya.”); } else{ System.out.println(”Ez nem egy kutya.”); }

36  pub könyvtár 7. gyakorlat  „alk” csomagban levő osztályok  Absztinens és Iszakos csomagon kívüli osztályok

37  pub könyvtár 7. gyakorlat  „fgv” csomagban levő osztályok  FuggvMain.java

38  szerda éjfélig küldhető el 3 pluszpontért nekem ben Feladat:  Írj egy Dolgozó osztályt: o ez a következő protected láthatóságú adattagokkal rendelkezik: adószám, név, születési dátum (Date típusú), fizetés. o Írj az osztályhoz paraméteres konstruktort, definiáld felül a toString metódust, valamint az adattagokhoz legyenek getter-setter metódusok! o Írj az osztályhoz egy fizetésemelés metódust, mely egy számot vár paraméterül, és annyi százalákkal emeli meg a dolgozó fizetését.

39  Írj egy Főnök osztályt: o ez a Dolgozóból származik, és azon felül a „vezetői szint” (értéke: projektmenedzser  csoportvezető  osztályvezető  vezérigazgató) és a „prémium” (egész szám, a fizetésen felüli prémium összege) privát adattagokkal rendelkezik. Ennek az osztálynak is legyen paraméteres konstruktora, getter-setter metódusai, toString metódusa felüldefiniálva. o Definiáld felül a Főnök osztályban a Dolgozó fizetésemelés metódusát, a változás annyi, hogy a főnöknél a fizetés és a prémium is adott százalékkal emelkedik. ◦ Írj egy „előléptetés” metódust a Főnök osztályhoz, mely a következő vezetői szintre lépteti az adott egyedet. De csoportvezetői szintnél magasabbra a metódus nem léptethet senkit. A metódus igaz vagy hamis értékkel tér vissza attól függően, sikerült-e az előléptetés.

40  Írj egy futtatható osztályt: o Hozz létre egy-két példányt a Dolgozó és a Főnök osztályokból, próbáld ki a metódusaikat.  Mindhárom osztályt helyezd a „szorgalmi3” nevű csomagba!


Letölteni ppt "Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek."

Hasonló előadás


Google Hirdetések