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

Hasonló dokumentumok
és az instanceof operátor

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

Programozási nyelvek Java

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

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Osztályok. 4. gyakorlat

7. K: JAVA alapok Konzultáció

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?

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

Java programozási nyelv

Programozási nyelvek Java

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

OOP: Java 8.Gy: Gyakorlás

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

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

Programozási nyelvek Java

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

Segédanyag: Java alkalmazások gyakorlat

JAVA PROGRAMOZÁS 2.ELŐADÁS

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

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

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

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

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

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

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Java programozási nyelv 10. rész Input/output kezelés

Segédanyag: Java alkalmazások gyakorlat

Objektumorientált programozás C# nyelven

Java és web programozás

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

Programozás I. Első ZH segédlet

Java IX. telkezelés a Java-ban

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

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

Java IX. telkezelés a Java-ban

BME MOGI Gépészeti informatika 8.

Globális operátor overloading

Kivételkezelés, naplózás. Exception handling, logging

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

Segédanyag: Java alkalmazások gyakorlat

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

Programozási nyelvek II.: JAVA

Programozási technológia

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

OOP #14 (referencia-elv)

Objektumorientált programozás Java-ban

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

Objektumorientált programozás C# nyelven

Java és web programozás

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

Programozási nyelvek Java

Programozási nyelvek II.: JAVA

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

Bevezetés a Java programozási nyelvbe

Java VII. Polimorfizmus a Java nyelvben

Java és web programozás

Java VII. Polimorfizmus a Java nyelvben

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

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


Már megismert fogalmak áttekintése

Öröklés és Polimorfizmus

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

Java Programozás 5. Ea: OOP alapok. Abstract Javaságok

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

OOP: Java 7.Gy: Öröklődés, referenciák

Objektumorientált programozás C# nyelven

Generikus Típusok, Kollekciók

Szoftvertechnolo gia gyakorlat

Bevezetés a Java programozási nyelvbe

Interfészek. PPT 2007/2008 tavasz.

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

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.


ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

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

Informatika terméktervezőknek

A Java nyelv. Java programozás alapjai. Hello world futtatása. Java adattípusok. Egyszerű adattípusok.

JNDI - alapok. Java Naming and Directory Interface

Bevezetés a Python programozási nyelvbe

Programozási nyelvek Java

III. OOP (objektumok, osztályok)

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás II gyakorlat. 6. Polimorfizmus

Elemi Alkalmazások Fejlesztése II.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Programozási technológia

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás C++ -ban

Objektumorientált programozás C# nyelven

Java felhasználói felület

Átírás:

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

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 objektumreferencia igen. Az osztály fejlécében az abstract kulcsszóval hozunk létre abstract osztályt.

Abstract metódusok és osztályok 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 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 ); class COsztaly extends BOsztaly{ protected int c; public COsztaly(){ c = 23; public void kiir(){ System.out.println(a + + b + + c );

Abstract metódusok és osztályok 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 Futás közbeni típusazonosítás 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

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.

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

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

Miért jó az interface? Interface-ek 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.

Interface-ek public interface Kiiro{ public void kiir(); class Egyik implements Kiiro{ public void kiir(){ System.out.println( Egyik ); class Masik implements 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 );

Gyorstalpaló kötelezőprogramhoz- Console-ról való beolvasás. 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 ) );

Gyorstalpaló kötelezőprogramhoz- Console-ról való beolvasás. 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- Console-ról való beolvasás. 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ó