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

Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.

Hasonló előadás


Az előadások a következő témára: "Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat."— Előadás másolata:

1 Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat

2 Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni, vele objektumpéldány nem készíthető, azonban objektum-referencia igen. Az osztály fejlécében az abstract kulcsszóval hozunk létre abstract osztályt.

3 Az abstract osztályok további jellegzetessége, hogy bizonyos műveletek, amelyek szükségesek az osztály működéséhez, általában nincsenek kidolgozva – a függvény dekralációt pontosvessző zárja és nincs törzsük. Az ilyen metódusoknál is alkalmazni kell az abstract kulcsszót. Ilyenkor az abstract metódusok implementációját a származtatott osztályban kell megtenni. Amennyiben ezt nem tesszük meg, akkor a származtatott osztálynak is abstract-nak kell lennie! Ha egy osztályban van abstract metódus, akkor azt az osztály fejrésznél is jelezni kell. Abstract osztálynak nem kötelező minden függvényének, hogy abstract legyen. Abstract metódus nem lehet private és final! Abstract metódusok és osztályok

4 abstract class AOsztaly{ protected int a = 12; public abstract void kiir(); } class BOsztaly extends AOsztaly{ protected int b; public BOsztaly(){ b = 13; } public void kiir(){ System.out.println( a + ” ” + b ); } } Abstract metódusok és osztályok class COsztaly extends BOsztaly{ protected int c; public COsztaly(){ c = 23; } public void kiir(){ System.out.println(a + ” ” + b + ” ” + c ); } }

5 AOsztaly-ra hivatkozó referenciával példányosíthatunk BOsztaly és COsztaly objektumot. AOsztaly aoszt = new BOsztaly(); aoszt.kiir(); // a BOsztaly kiir metódusa fog meghívódni az AOsztaly referencián keresztül. Mivel minden osztály impliciten az Object osztályból száramzik, megtehetjük ezt is: Object o = new COsztaly(); ( ( COsztaly ) o ).kiir(); //de itt típus-átalakítást kell végrehajtani. Abstract metódusok és osztályok

6 Upcast (ősre konvertálás): Elveszítjük a konkrét típust, de a konverzió biztonságos. Downcast (leszármazottra konvertálás): visszanyerjük a konkrét típust (nem minden nyelven biztonságos). Java- ban ez biztonságos, ClassCastException kivétel dobódik, ha nem jól downcast-olunk. instanceof kulcsszóval tudjuk megvizsgálni, hogy az adott referencia objektuma milyen típusú. Object o = new COsztaly(); if ( o instanceof COsztaly ){ ((COsztaly)o).kiir(); //Downcast } Abstract metódusok és osztályok – Futás közbeni típusazonosítás

7 Interface-ek A Java nyelvben nincs többszörös öröklődés. A Java fejlesztői még is lehetőséget adtak a „többszörös öröklődésre”. ( Nem konkrét többszörös öröklődés, mint C++ nyelven. ) Interface = teljesen abstract osztály. interface kulcsszóval hozunk létre interface-t. Interface-ben csak konstans és public abstract metódus szerepelhet. Viszont nem kötelező interface esetén az abstract kulcszó. Fordításkor.class állomány jön létre. Az interface, csak formát ad meg implementáció nélkül. Protokollt biztosít az egyes osztályok között.

8 [public] interface InterfaceName{ [public] final int konstans = érték; //kötelező inicializálni [public] int metódus1(); [public] int metódus2(); } Interface-ek

9 Osztályba való implementáláshoz az implements kulcsszót kell használni. class Osztaly extends OsOsztaly implements Interface1, Interface2 …{} Több interface használatánál vesszővel válasszuk el az interface neveket. Az interface-t használó osztálynak minden interface-beli függvényt implementálni kell, különben abstract-nak kell hogy legyen.

10 Interface-ek Miért jó az interface? Protokollt biztosít különböző osztályok között. Pl: Egy függvény olyan objektum példányt vár paraméterül, amelynek az osztálya implementál egy adott interface-t. Ilyenkor a függvénynek bármely olyan objektumot átadhatunk, amelynek az osztálya implementálja az adott interface-t.

11 Interface-ek public interface Kiiro{ public void kiir(); } class Egyik imlements Kiiro{ public void kiir(){ System.out.println( ”Egyik” ); } } class Masik imlements Kiiro{ public void kiir(){ System.out.println( ”Masik” ); } } class Harmadik{ public static void print( Kiiro ki ){ ki.kiir(); } } class Futtato{ public static void main( String[] args ){ Egyik egyik = new Egyik(); Masik masik = new Masik(); Harmadik.print( egyik ); Harmadik.print( masik ); } }

12 Gyorstalpaló kötelezőprogramhoz- IO A Java IO használatákor mindig be kell importálni a java.io.*;-t! Console-ról való beolvasáshoz a BufferedReader osztályt használjuk. A BufferedReader konstruktorának meg kell adni egy Reader típusú objektumot, mi most az InputStreamReader-t adjuk meg, ennek pedig a konstruktorában meg kell mondani, hogy honnan olvasson! Tehát: BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );

13 Beolvasás: Egy karaktert: char a = (char)reader.read(); // int-et ad vissza, át kell alakítani char-rá. Egész sor (String): String s = reader.readLine(); Le is kell zárni: reader.close(); Gyorstalpaló kötelezőprogramhoz- IO

14 A beolvasáshoz szükség lenne a kivételkezelésre, de ezt meg is tudjuk kerülni. Hátránya: hiba esetén nem várt mellékhatás, esetleg elszáll a program. Ahhoz, hogy kikerüljük a kivételek kezelését, jelezni kell a függvény fejnél, hogy milyen kivételt dobhat. A beolvasás IO kivételt dobhat, tehát: public void Beolvas() throws IOException{} throws kulcsszóval tudjuk jelezni, hogy milyen kivétel is fordulhat elő. Minden olyan függvényben, mely használ egy ilyen függvényt, ami kivételt dobhat, vagy le kell kezelni a kivételt, vagy ott is jelezni kell, hogy milyen kivétel várható Gyorstalpaló kötelezőprogramhoz- IO

15 File írás - olvasás File írás: Writer out = new BufferedWriter( new FileWriter( utvonal ) ); out.write( String ); //kiírás out.flush();//kiürítjük a stream-et. out.close();//lezárjuk a stream-et BufferedWriter out2 = new BufferedWriter( new FileWriter( utvonal ) ); plusz metódus: newLine(); //sortörést tesz.

16 File olvasás: BufferedReader reader = new BufferedReader( new FileReader( utvonal ) ); reader.readLine();//egész sor beolvasás String-ként. reader.close();//lezárás File írás - olvasás

17 StringTokenizer Szükség lehet a konzolról vagy fájlból beolvasott szövegek feldolgozására is. Ilyen célokra használható a java.util csomag StringTokenizer osztálya. A konstruktorában megadhatjuk, melyik String-et szeretnénk feldolgozni, és azt is, milyen jelek mentén szeretnénk felosztani (Ha nem adunk meg felosztó jelet, a szóközt fogja használni – ez az alapértelmezett felosztó)

18 StringTokenizer

19 Pélada progik  Alkoholos.java  Ital.java  AlkoholosItal.java  Gyumolcs.java  Gyumolcsle.java  ErjedtGyumolcs.java  Bor.java  Aszu.java  Absztinens.java  Iszakos.java


Letölteni ppt "Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat."

Hasonló előadás


Google Hirdetések