Objektum-elvu programozas (OOP) Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Objektumok, oszta lyok (adatkozpontu ) ö Esemenyvezerelt programoza s í vs. struktura lt programoza s í deklaratıv / imperatıv
ö ö ö ö
AdatabsztrakciÖ (egysegbe za ra s, adatelrejtes) Polimorfizmus O rokl˝des Dinamikus kotes
Pelda objektumokra
Objektumok ö (Program) entita s: a llapot es funkcionalita s ö egyedi, za rt (interfesz), konzisztencia ö Attribu tumok, esemenyek ö Attribu tum - va ltozÖ (adattag) ö Esemenykezel˝ - alprogram (metÖ dus)
Kor
Alkalmazott
x-koord: 0 y-coord: 0
Nev: Gipsz Jakab
Suga r: 1 egyseg Terűlet: 3.1415926...
Fizetes: 200e Ft
Munkahely: ELTE
Nagyıt
FizetestEmel
Kicsinyıt
FeladatotAd
Eltol
Pelda objektumokra Kor
Kozeppont: OrigÖ Suga r: 1 egyseg Terűlet: 3.1415926...
Pelda objektumokra
Alkalmazott Nev: Gipsz Jakab Munkahely: ELTE
Kor
Kozeppont: OrigÖ
Alkalmazott Nev: Gipsz Jakab Beoszta s: tana rseged
Fizetes: 200e Ft
Suga r: 1 egyseg Terűlet: 3.1415926...
Nagyıt
FizetestEmel
Nagyıt
FizetestEmel
Kicsinyıt
FeladatotAd
Kicsinyıt
FeladatotAd
Eltol
Fizetes: 200e Ft
Eltol
1 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Kapcsolatok objektumok kozott
Pelda objektumok kapcsolata ra Kor
ö Osztaly: hasonlÖ objektumok gy“jtemenye í Struktóralis hasonlo sag (reprezentacio ) í Funkciona lis hasonlÖ sa g (viselkedes)
Tıpus: tıpusertekek halmaza Pelda nyosıta s (oszta ly ð objektum) Rela ciÖ k: is-a, has-a ö Aggrega ciÖ k, asszocia ciÖ k
Pont Kozeppont: OrigÖ Suga r: 1 egyseg Terűlet: 3.1415926...
x-koord: 0 y-koord: 0
Nagyıt
Eltol
Kicsinyıt Eltol
Pelda: oszta lyok es kapcsolataik
Pelda: oszta lyok es kapcsolataik (2) Ember
Kor
Alkalmazott
Kozeppont: Pont Suga r: Sza m Terűlet: Sza m Nagyıt Kicsinyıt
Nev: String
Pont
Nev: String Beoszta s: String
x-koord: Sza m y-koord: Sza m
Fizetes: Sza m
Eltol
FizetestEmel
Eltol
Beosztott FeladatotAd
F˝nok
Oszta lyok, objektumok a Java nyelvben Osztaly = se ma: objektumok reprezenta ciÖ ja nak megada sa Objektum: egy oszta ly egy pelda nya minden objektum valamilyen oszta lybÖ l sza rmazik pelda nyosıta ssal
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Reprezenta ciÖ : pelda ny adattagok, pelda ny metÖ dusok Oszta ly: tıpus
2 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Az Alkalmazott oszta ly public class Alkalmazott {
Az Alkalmazott oszta ly public class Alkalmazott {
String nev; String beosztas; int fizetes;
String nev; String beosztas; int fizetes;
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
}
Alkalmazott.java
}
Alkalmazott.java
Az Alkalmazott oszta ly public class Alkalmazott { String nev; String beosztas; int fizetes;
Java tutorial
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; } int szobaszam; }
Copyright á 2000-2001, Kozsik Tama s
Alkalmazott.java javac Alkalmazott.java java Alkalmazott
F˝program
Feladat
public class Alkalmazott { ... }
Alkalmazott.java
public class Program { public static void main( String[] args ){ Alkalmazott a; a = new Alkalmazott(); } }
ö Keszıtsd el a Pont oszta lyt! ö Tulajdonsa gok: x es y koordina ta ö M“velet: eltola s í dx es dy ertekekkel
Program.java javac Program.java java Program
3 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
F˝program
F˝program
public class Alkalmazott { ... }
public class Alkalmazott { ... }
Alkalmazott.java
public class Program { public static void main( String[] args ){ Alkalmazott a; a = new Alkalmazott(); } }
Alkalmazott.java
public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); } }
Program.java
Program.java
javac Program.java java Program
javac Program.java java Program
F˝program
Objektumok ta rola sa
public class Alkalmazott { ... }
Alkalmazott.java
public class Program { public static void main( String[] args ){ new Alkalmazott(); } }
Program.java javac Program.java java Program
ö Dinamikus memÖ riakezeles szűkseges ö Ada, C: mutatÖ k (pointerek) ö Java: referencia k Alkalmazott a; Az a va ltozÖ ban az objektum memÖ riabeli cımet ta roljuk. A deklara ciÖ hata sa ra nem jon letre objektum!
Objektum letrehoza sa ö Az a va ltozÖ hoz objektum hozza rendelese a = new Alkalmazott(); ö Pelda nyosıta s: valamilyen oszta lybÖ l a new opera torral (memÖ riafoglala s a mellekhata s, a kezd˝cım a kifejezes erteke) new Alkalmazott() ö Az a referencia a new opera torral letrehozott ”objektumra mutat„
Java tutorial Copyright á 2000-2001, Kozsik Tama s
4 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ö Keszıts f˝programot a Pont oszta lyhoz. Hozz letre benne egy Pont objektumot.
Java tutorial Copyright á 2000-2001, Kozsik Tama s
MetÖ dus meghıva sa public class Alkalmazott {
MetÖ dus meghıva sa public class Alkalmazott {
...
...
void fizetestEmel( ... ){ ... }
public void fizetestEmel( ... ){ ... }
}
}
public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestEmel(40000); } }
public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestEmel(40000); } }
Adattag elerese public class Alkalmazott { ... int fizetes;
Adattag elerese public class Alkalmazott { ... public int fizetes;
public void fizetestEmel( ... ){ ... }
public void fizetestEmel( ... ){ ... }
}
}
public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetes = 200000; a.fizetestEmel(40000); } }
public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetes = 200000; a.fizetestEmel(40000); } }
5 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ö A llıtsd be a letrehozott Pont koordina ta it, told el a definia lt metÖ dussal, vegűl ırd ki a keperny˝re a koordina ta k u j erteket.
Adattagok definia la sa ö Adattag = pelda nyva ltozÖ ö Adattag megada sa - va ltozÖ deklara ciÖ public class Alkalmazott { ... int fizetes; public void fizetestBeallıt( ... ){...} public void fizetestEmel( ... ){ ... } }
Adattagok inicializa la sa
Java tutorial
public class Alkalmazott { ... int fizetes = 200000; public void fizetestBeallıt( ... ){...} public void fizetestEmel( ... ){ ... } }
Copyright á 2000-2001, Kozsik Tama s public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestEmel(40000); } }
Adattagok automatikus inicializa la sa: pelda public class Alkalmazott { ... int fizetes; public void fizetestBeallıt( ... ){...} public void fizetestEmel( ... ){ ... } } Olyan, mint: int fizetes = 0; public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestEmel(40000); } }
Adattagok automatikus inicializa la sa: implicit kezd˝ertek ö Pelda nyva ltozÖ k eseten tortenik í alprogram loka lis va ltozÖ ja ra nincs (fordıta si hiba t okoz, ha el˝zetes ertekada s nelkűl prÖ ba ljuk haszna lni!) í pelda nyva ltozÖ k eseten nehez lenne betartani ezt a szaba lyt, ezert inicializa l automatikusan
ö Pl. sza m tıpusok eseten nulla (0 vagy 0.0), boolean eseten false, char eseten \u0000 ö Nem illik kihaszna lni!
6 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ö A Pont oszta lyban az x es y adattagokat explicit inicializa ld 0-ra!
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Hivatkoza s pelda nyva ltozÖ kra Adattagok definia la sa: pelda k int fizetes=200000, pÖ tlekok, levona sok=fizetes/4; La thatÖ sa g va ltoztata sa: public int fizetes = 200000; Nem mÖ dosıthatÖ ertek“ va ltozÖ k (”konstansok„) final double ADÜ KULCS = 25;
MetÖ dusok ö MetÖ dus: alprogram, amely egy objektumhoz van kapcsolva ö Az Áels˝ parameter„ az objektum ö Pelda ul Java ban a.tobbetKeresMint(b) Ada ban tobbetKeresMint(a,b) ö U zenetkűldeses szintaxis ö Mellekhata sos fűggveny í elja ra s: void visszateresi ertek
public class Alkalmazott { OsztalydefinıciÖ n belűl public int fizetes; public void fizetestEmel( int mennyivel ){ fizetes += mennyivel; Ásaja t„ adattagra } public boolean tobbetKeresMint(Alkalmazott masik){ return fizetes > masik.fizetes; mas objektum } adattagja ra } public class Program { Min˝sıtett public static void main( String[] args ){ nev Alkalmazott a = new Alkalmazott(); a.fizetes = 200000; } Ma s oszta lyban }
MetÖ dusok definıciÖ ja ö Fejb˝l (specifika ciÖ bÖ l) es torzsb˝l a ll public void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
ö Fej: mÖ dosıtÖ k, a visszateresi ertek tıpusa, azonosıtÖ nev, parameterlista, ellen˝rzott kivetelek ö Parameterlista: (int x, int y, char c) ö Szignatu ra: azonosıtÖ , parameterek tıpusa public void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
7 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pelda k metÖ dusdefinıciÖ kra int lnko( int a, int b ){ while( a!=b ) if( a>b ) a-=b; else b-=a; return a; } public void fizetestDuplaz(){ fizetes *= 2; }
Alaptıpusokra ertek szerinti parametera tada s
U res parameterlista
Kilepes metÖ dusbÖ l ö Ha nem void a visszateresi ertek tıpusa, akkor kell return utasıta s, amivel megadjuk a visszateresi erteket ö Ha nincs visszateresi ertek (void), akkor is lehet return utasıta s, amivel kilephetűnk void f(...){ while(...){ ... if(...) break; } }
Kilepes metÖ dusbÖ l ö Ha nem void a visszateresi ertek tıpusa, akkor kell return utasıta s, amivel megadjuk a visszateresi erteket ö Ha nincs visszateresi ertek (void), akkor is lehet return utasıta s, amivel kilephetűnk void f(...){ while(...){ ... if(...) return; } }
VezerlesmegszakıtÖ utasıta sok ő continue - kilep a ciklusmagbÖ l ő break - kilep a ciklusbÖ l ő return - kilep a metÖ dusbÖ l
A visszateresi ertek megada sa ö A fordıtÖ ellen˝rzi, hogy ”fűggveny„ eseten mindenfelekepp lesz visszateresi ertek, azaz a vezerles mindig eljut egy return utasıta shoz ö HasonlÖ an a metÖ dusok loka lis va ltozÖ i kapcsa n vegzett ellen˝rzeshez (inicializa ltsa g)
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Fordıta si idej“ dontes
8 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ö Keszıtsd el a Kor oszta lyt! ö Tulajdonsa gok: kozeppont (Pont) es suga r (double) ö M“veletek: eltol es nagyıt í eltol: dx es dy ertekekkel a kozeppontot kell eltolni... í nagyıt: a sugarat szorozni faktor-ral
Kozvetlen adathozza feres megtilta sa public class Alkalmazott { ... int fizetes; public void fizetestBeallıt( int osszeg ){ fizetes = osszeg; } public void fizetestEmel( ... ){ ... } } public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestBeallıt(200000); a.fizetestEmel(40000); } }
Feladat ö A Kor oszta lyban vezess be egy u j attribu tumot, a terűletet tartsuk benne nyilva n. Ird meg a sugaratBea llıt m“veletet! ö Haszna ld a Math.PI erteket... ö A m“veletek legyenek publikusak, az attribu tumok ne! ö Keszıts lekerdez˝ m“veleteket a suga rhoz es a terűlethez, melyek publikusak. (Az adattagok nem publikusak!) A lekerdez˝ m“veletek neve megegyezhet a lekerdezett attribu tum nevevel.
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Tıpusinvaria ns meg˝rzese public class Alkalmazott { double fizetes, evesFizetes; public void fizetestBeallıt(int uj){ fizetes = uj; evesFizetes = 12*fizetes; } }
Tıpusinvaria ns meg˝rzese public class Kor { double sugar, terőlet; public void sugaratBeallıt(double r){ sugar = r; terőlet = sugar*sugar*Math.PI; } }
9 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Referencia k ra a llıta sa egy objektumra ö Referencia es objektum egyűttes letrehoza sa Alkalmazott a = new Alkalmazott();
Feladat ö PrÖ ba ld ki a Pont oszta ly egy objektuma val!
ö Referencia ra a llıta sa meglev˝ objektumra Alkalmazott b = a; A ket referencia ugyanarra az objektumra mutat. b.fizetestEmel(10000);
U res referencia
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Ha egy va ltozÖ erteke null, akkor nem mutat objektumra. Alkalmazott c = null; ö A null referencia minden oszta lyhoz haszna lhatÖ . ö Pelda nyva ltozÖ k automatikus inicializa la sa hoz ezt haszna lja a Java ő c.fizetestEmel(10000); futa si idej“ hiba: NullPointerException
Nem va ltoztathatÖ referencia final Alkalmazott a = new Alkalmazott(); a.fizetestBeallıt(100000); a = new Alkalmazott();
A referencia ”konstans„, nem lehet ma sik objektumra a llıtani, de a mutatott objektum megva ltozhat.
O sszetett tıpusok ö O sszetett erteket csak objektummal lehet letrehozni: az egyetlen tıpuskonstrukciÖ ö Minden osszetett ertek dinamikus ö Minden osszetett ertekre referencia n keresztűl lehet hozza ferni ö Pl. a tombok is (specia lis predefinit) oszta lyok
10 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Objektum parameterkent public boolean tobbetKeresMint(Alkalmazott masik){ return fizetes > masik.fizetes; } public void keressenAnnyitMint(Alkalmazott masik){ masik.fizetestBeallıt(fizetes); }
F˝programban:
a.keressenAnnyitMint(b);
ö Az objektumreferencia ertek szerint adÖ dik a t: referencia szerinti parame teratadas ö Olyan, mint a C-ben a cım szerinti
Feladat ö A Pont es a Kor oszta lyokhoz keszıtsd el a ta volsa g() metÖ dust, mely megadja az objektum ta volsa ga t egy, a parameterekent a tadott Pont objektumtÖ l. ö A Kor oszta lyban definia lj pelda nymetÖ dust, mely a parameterekent a tadott pont objektumot a kor objektum kozeppontja ba a llıtja: public void kozeppontba( Pont p )
Mellekhata s ö A metÖ dusoknak lehet mellekhata sa í az objektumon, amihez tartozik í globa lis objektumokon (System.out) í parameterkent a tadott objektumokon public class Program { public static void fizetestEmel ( Alkalmazott a, int mennyivel ){ a.fizetestEmel(mennyivel); } ... }
Az objektum elettartama ö Nincs olyan utasıta s, amivel objektumot explicit mÖ don meg lehet szűntetni ö A nyelv biztonsa gossa ga t noveli ö Szemetgy“jtes: ha ma r nem hivatkoznak egy objektumra, akkor azt meg lehet szűntetni. Alkalmazott a = new Alkalmazott(); a = null; ö Nem biztos, hogy megsz“nik a program vege el˝tt
Szemetgy“jtes ö Modern nyelvekben gyakori ö Biztonsa gossa g í tobbszoros hivatkoza s eseten: ha az egyik hivatkoza son keresztűl megszűntetjűk az objektumot, egy ma sikon keresztűl meg tova bbra is haszna lni prÖ ba ljuk
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Hatekonysa g: id˝ es ta r ö Ciklikus hivatkoza s ö Szemetgy“jt˝ algoritmusok
11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Oszta lyszint“ va ltozÖ k es metÖ dusok ö A tyu k es a toja s: programot csak objektumhoz tudunk keszıteni (metÖ dust), objektumot pedig csak a program futa sa kozben tudunk letrehozni. class hello { public static void main( String[] args ){ System.out.println("hello"); } }
Oszta lyszint“ va ltozÖ k es metÖ dusok 2 ö Az objektumoknak vannak attribu tumai es m“veletei, amiket az oszta lydefinıciÖ ban adunk meg: pelda nyva ltozÖ k es (pelda ny)metÖ dusok. public class Alkalmazott { int fizetes = 0; public void fizetestEmel( int mennyivel ){ ... } }
Oszta lyszint“ va ltozÖ k es metÖ dusok 3 ö Az oszta lyoknak is lehetnek: oszta lyszint“ va ltozÖ k es oszta lyszint“ metÖ dusok. Ezeket is az oszta lydefinıciÖ ban adjuk meg, de a static mÖ dosıtÖ szÖ val: static int nyugdıjKorhatar = 60; public static void nyugdıjKorhatartEmel( int mennyivel ){ nyugdıjKorhatar += mennyivel; }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
int eletkor;
Oszta lyszint“ va ltozÖ k es metÖ dusok 4 ö A pelda nyva ltozÖ k minden objektumhoz (az oszta ly minden pelda nya hoz) letrejonnek, az oszta lyszint“ va ltozÖ k az oszta lyhoz jonnek letre; azaz csak egy van, es minden objektum osztozik rajta. ö A pelda nymetÖ dusok egy objektumhoz tartoznak: az els˝ (kva zi implicit) parameter az objektum; oszta lyszint“ metÖ dusok az oszta ly m“veletei, az "els˝ parameter" az oszta ly. ö Az oszta lyok is picit olyanok, mint az objektumok. (Azzal, hogy vannak attribu tumaik es esemenykezel˝ik.)
Oszta lyszint“ va ltozÖ k es metÖ dusok 5 ö Az oszta lyszint“ va ltozÖ k: í kifejezhetik, hogy ugyanaz az attribu tumertek van minden objektumhoz (nyugdıjKorhata r) í az oszta ly a llapota t rogzıthetik (ka vepenz) static int kavepenz = 0; public int kaveraBefizet(){ fizetes -= 100; kavepenz += 100; } static public kavetVesz(){ ... }
12 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Oszta lyszint“ va ltozÖ k es metÖ dusok 6 ö A static dolgokhoz nem kell objektum; a f˝program is ilyen volt. ö A procedura lis programoza s imita la sa: í í
oszta ly - modul oszta lyszint“ metÖ dus - alprogram
ö "Globa lis ertekek", pelda: System.out, Math.PI.
F˝program m“kodese ö Egy Java program egy oszta ly "vegrehajta sa nak" felel meg: ha van statikus main nev“ metÖ dusa. ö A java-nak megadott nev“ oszta lyt inicializa lja a virtua lis gep (pl. az oszta lyva ltozÖ it inicializa lja), es megprÖ ba lja elkezdeni a main-jet. Ha nincs main: futa si idej“ hiba. ö Vegeteres: ha a main vegeter, vagy meghıvjuk a System.exit(int)-et. (Kilepesi a llapot, nulla szokott a norma lis a llapot lenni.) ö A main feje: amit eddig csina ltunk. (Elvileg az args nev helyett lehet ma s is, de az a megszokott.) A String[]-be kerűlnek a virtua lis gepnek a tadott extra parameterek. Cben ugyanez: argc, argv.
Pelda Java tutorial Copyright á 2000-2001, Kozsik Tama s
static va ltozÖ k inicializa la sa ö Ugyanu gy, mint a pelda nyva ltozÖ kna l: az el˝fordula s sorrendjeben. static int i = 1; static int j = 1;
ö pelda nyva ltozÖ k: minden pelda ny letrehoza sakor ö oszta lyva ltozÖ k: egyszer, az oszta ly inicializa ciÖ jakor ö oszta ly inicializa ciÖ ja: az els˝ ra vonatkozÖ hivatkoza s kiertekelesekor (pl. pelda nyosıta s, metÖ dus meghıva sa, va ltozÖ hozza feres)
public class Argumentumok { public static void main( String[] args ){ if (args.length > 0) { for (int i=0; i < args.length; i++) System.out.println(args[i]); } else { System.out.println("nincsenek argumentumok"); } } }
static va ltozÖ k inicializa la sa 2 ö inicializa torban lehet ma r deklara lt oszta lyszint“ va ltozÖ , de nem lehet pelda nyva ltozÖ ; pelda nyva ltozÖ inicializa tora ban viszont lehet oszta lyszint“ va ltozÖ static int k = i+j-1; boolean tulkoros = eletkor > nyugdıjKorhatar;
ö automatikus inicializa ciÖ van: implicit kezd˝ertek
13 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Hivatkoza s oszta lyszint“ va ltozÖ ra Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Objektumon es oszta lyon keresztűl egyara nt. Alkalmazott a = new Alkalmazott(); ... a.nyugdıjKorhatar ... ... Alkalmazott.nyugdıjKorhatar ...
Hivatkoza s oszta lyszint“ va ltozÖ ra 2 ö min˝sıtes nelkűl: az aktua lis objektum oszta lya nak oszta lyszint“ va ltozÖ ja ra ö objektumos min˝sıtessel ö oszta lyos min˝sıtessel; objektumok, pelda nyok hia nya ban is m“kodik public class Szamozott { static int kovetkez = 1; public final int SORSZAM = kovetkez ++; }
... es oszta lymetÖ dusra ö Csak az oszta lyva ltozÖ khoz ferhet hozza , a pelda nyva ltozÖ khoz nem. (Nincs aktua lis pelda ny, mert akkor is vegrehajthatÖ , ha nincs pelda ny.) a.nyugdıjKorhatartEmel(5); Alkalmazott.nyugdıjKorhatartEmel(5);
ö A pelda nyva ltozÖ k inicializa tora minden pelda nyosıta skor kiertekel˝dik. (Ez a mellekhata sos kifejezeseknel fontos!)
Feladat ö A Kor oszta lyhoz ırj illeszkedik() m“veletet, mely eldonti, hogy a parameterkent megadott Pont objektum illeszkedik-e a korvonalra - egy adott t“reshata ron belűl. A t“reshata r erteke a Kor oszta ly jellemz˝je. ö A Pont oszta lyhoz keszıts m“veletet, amely a parameterkent a tadott ket Pont objektum a ltal meghata rozott szakasz felez˝pontja t adja vissza.
A this pszeudova ltozÖ ö Az oszta lydefinıciÖ n belűl a pelda nymetÖ dusokban this nevvel hivatkozhatunk az aktua lis objektumra. ö A static metÖ dusokban a this persze nem haszna lhatÖ . ö Ez egy predefinit nev. ö Noha a this.valami-hez a ltala ban nem kell a min˝sıtes, id˝nkent azert szűkseg lehet ra . Es olyan is van, amikor maga a this kell (pl. a tadni parameterkent). boolean kevesebbetKeresMint( Alkalmazott masik ){ return masik.tobbetKeresMint(this); } public void fizetestBeallıt( int fizetes ){ this.fizetes = fizetes; }
14 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Feladat ö A Kor oszta ly sugaratBea llıt metÖ dusa nak forma lis parametere legyen ugyanu gy elnevezve, mint a suga r attribu tum.
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Nevűtkozesek ö Pelda nyva ltozÖ es forma lis parameter neve megegyezhet. Pelda: el˝bb... ELFEDES ö MetÖ dusnev es va ltozÖ nev megegyezhet, mert a () megkűlonbozteti ˝ket a hivatkoza skor. int fizetes; public int fizetes(){ return fizetes; }
Pelda void fizetestEmel( int novekmeny ){ fizetes += novekmeny; }
Nevek tu lterhelese ö ugyanazt a nevet haszna lhatom tobb metÖ dushoz, ha kűlonboz˝ a szignatu ra í szignatu ra: nev plussz parameterek tıpusa nak sorozata í "metÖ dusnev tu lterhelese" í meghıva skor az aktua lis parameterek sza ma es (statikus) tıpusa alapja n dont a fordıtÖ (nem sza mıt a visszateresi ertek, mert anelkűl is meg lehet egy metÖ dust hıvni) í valaminek illeszkednie kell, kűlonben fordıta si hiba
Pelda void fizetestEmel( int novekmeny ){ fizetes += novekmeny }
void fizetestEmel(){ fizetes += 5000; }
void fizetestEmel(){ fizetestEmel(5000); }
void fizetestEmel( Alkalmazott masik ){ if (kevesebbetKeresMint(masik)) fizetes = masik.fizetes; }
void fizetestEmel( Alkalmazott masik ){ if (kevesebbetKeresMint(masik)) fizetes = masik.fizetes; }
a.fizetestEmel(10000); a.fizetestEmel(); a.fizetestEmel(b);
a.fizetestEmel(10000); a.fizetestEmel(); a.fizetestEmel(b);
15 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
O rokl˝des Feladat ö Keszıts kozeppontos tűkrozest vegz˝ m“veleteket a Pont es a Kor oszta lyokban. ö A m“veleteket meg lehessen hıvni Pont objektummal is es ket koordina ta val (cx,cy) is! ö ValÖ sıtsd meg a kozeppontos tűkrozes m“veleteket u gy, hogy egyma st hıvja k!
ö Oszta ly kiegeszıtese u j tagokkal (pelda nyva ltozÖ kkal, metÖ dusokkal). ö Szűl˝oszta ly, gyermekoszta ly. Tranzitıv leza rt: ˝s, lesza rmazott. ö orokles: a szűl˝ tagjaival is rendelkezik public class Fonk extends Alkalmazott { int beosztottakSzama = 0; public void ujBeosztott( Alkalmazott beosztott ){ ... } ... }
Oszta lyhierarchia ö az orokl˝desi rela ciÖ t gra fkent megadva oszta lyhierarchia nak is nevezik ö egyszeres orokl˝des eseten ez egy (ira nyıtott) erd˝ ö Java-ban van egy "univerza lis ˝soszta ly", az Object, minden oszta ly ennek a lesza rmazottja í ha nem adunk meg extends-et, akkor implicit extends Object van í Object: predefinit, a java.lang-ban van definia lva í olyan metÖ dusokat definia l, amelyekkel minden objektumnak rendelkeznie kell í minden, ami nem primitıv tıpusu (int, char, stb.), az Object lesza rmazottja
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö teha t az oszta lyhierarchia egy ira nyıtott fa
Hozza feresi kategÖ ria k ö Informa ciÖ -elrejtes: nem jÖ , ha "mindenki mindent la t". í a program komponensei jÖ l meghata rozott, sz“k interfeszen keresztűl kapcsolÖ dnak ossze í egy komponensen belűl er˝s koheziÖ , komponensek kozott korla tozott, sz“kıtett interfesz í a program novekedese nem okoz exponencia lis, csak linea ris komplexita s-novekedest í nyelvi ta mogata s aja nlott az informa ciÖ elrejtesehez, hogy ne a programozÖ nak kelljen mindenre figyelni
Hozza feresi kategÖ ria k 2 ö Komponensek a Java programokban: els˝sorban oszta lyok es csomagok szintjen. í Amivel mi most foglalkozunk: minden egy (nevtelen) csomagban, pl. minden haszna lt oszta ly egy konyvta rban lefordıtva. í Oszta lyok szintjen: adattagok es metÖ dusok.
ö Pelda: í Kor oszta ly (suga r es terűlet) í Alkalmazott oszta ly (fizetes es evesFizetes) í Csak egyszerre lehet babra lni, hogy a tıpusinvaria ns megmaradjon: metÖ duson keresztűl lehessen csak csina lni.
16 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
MÖ dosıtÖ szavak: public, private, protected ö minden tag pontosan egy hozza feresi kategÖ ria ban lehet, ezert ezen mÖ dosıtÖ szavak kozűl max. egyet lehet haszna lni egy taghoz ö Fe lnyilvanos tagok: ha nem ırunk semmit. í azonos csomagban definia lt oszta lyok (objektumai).
ö Nyilvanos tagok: public í kűlonboz˝ csomagokban definia lt oszta lyok is elerik í ıra s/olvasa s szaba lyoza sa: nincs "read-only" í megolda s: lekerdez˝ fűggvennyel (aka r ugyanazzal a nevvel is lehet)
Feladat
ö Privat tagok: private í csak az oszta lydefinıciÖ n belűl erhet˝ el í az oszta ly minden objektuma í jÖ lenne egy meg szigoru bb is, de ilyen nincs
ö Ve dett tagok: protected í a felnyilva nos kategÖ ria kiterjesztese: azonos csomag, plussz a lesza rmazottak í Az orokolt tagok mindig ott vannak, de nem mindig erhet˝ek el (kozvetlenűl) a gyerekb˝l, csak ha a szűl˝ ezt megengedi a hozza feresi mÖ dosıtokkal. ö
Pl. egy private va ltozÖ hoz/metÖ dushoz nem fer hozza , csak esetleg kozvetett u ton, ma s (orokolt) metÖ dusokon keresztűl.
Inicializa ciÖ A tıpusinvaria ns megteremtese pelda nyosıta skor.
ö Keszıtsd el a SzınesPont oszta lyt a Pont oszta ly lesza rmazottjakent. j tulajdonsa g: szın. j m“veletek: szın bea llıta sa es lekerdezese. A szın attribu tum legyen priva t.
ö pelda nyva ltozÖ k inicializa ciÖ ja ö nehezkes a pelda nyosıta st "felparameterezni" (de nem lehetetlen, la sd a Sza mozott pelda t) ö inicializa la s egy extra metÖ dussal, pl. init ö ma s megolda s lenne a Factory, amikor az oszta ly egy oszta lyszint“ metÖ dusa t lehetne haszna lni pelda nyosıta sra
Factory metÖ dus public class Alkalmazott { static public Alkalmazott peldanyosıt( ... ){ Alkalmazott a = new Alkalmazott(); ... return a; } }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö meg mindig veszelyes, jobb nyelvi szinten osszekapcsolni a pelda nyosıta st es az inicializa la st
17 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Konstruktorok ö programkÖ d, ami a pelda nyosıta skor "automatikusan" vegrehajtÖ dik ö hasonlıt a metÖ dusokra, de nem pont ugyanolyan (nem tag, mert pl. nem orokl˝dik) ö a konstruktor neve = az oszta ly nevevel ö parametereket vehet a t ö tobb (kűlonboz˝ szignatu ra ju ) konstruktor is lehet egy oszta lyban ö csak pelda nyosıta skor hajtÖ dhat vegre (new mellett) ö a visszateresi tıpust nem kell megadni, mert az adott
ö MÖ dosıtÖ k kozűl csak a hozza feresi kategÖ ria t adÖ k haszna lhatÖ k (vannak egyebkent ma sok is, pl. a final). ö A torzs olyan, mint egy void visszateresi ertek“ metÖ duse, a parameter nelkűli return-t haszna lhatjuk. ö Szoka s: ugyanazokat a neveket haszna lhatjuk konstruktor forma lis parameternek, mint a pelda nyva ltozÖ knak (this haszna lata). ö Meghıvhat egy ma sik konstruktort is, this nevvel: az els˝ utasıta s lehet csak!
class Alkalmazott { ... public Alkalmazott( String nev, int fizetes ){ this.nev = nev; this.fizetes = fizetes; this.evesFizetes = 12*fizetes; } public Alkalmazott( String nev ){ this.nev = nev; this.fizetes = 40000; this.evesFizetes = 12*fizetes; } ... }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
public Alkalmazott( String nev ){ this(nev,40000); ... }
ö A konstruktorok el˝tt a rendszer lefoglalja a ta rat. ö ha a programozÖ nem ır konstruktort, akkor letrejon egy implicit, ami public, parameter nelkűli es űres torzs“ public F nok(){} ö A hozza feresi kategÖ ria k vonatkoznak a konstruktorokra is. ö Haszna lat: new uta n parameterek megada sa. í Aktua lis argumentumok a konstruktornak: ezek dontik el, hogy melyik konstruktor hıvÖ dik meg. í Ha nem ırtunk konstruktort, akkor nem adunk a t parametert es az implicit konstruktor hıvÖ dik meg.
ö A konstruktor nem orokolhet˝, de meghıvhatÖ (a this-hez hasonlÖ an) a szűl˝oszta lybeli konstruktor a legels˝ sorban: super nevvel. public class F nok extends Alkalmazott { public F nok( String nev, int fizetes ){ super(nev,fizetes); beosztottakSzama = 0; } public F nok( String nev ){ this(nev,100000); } }
18 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
ö Ha egy konstruktor nem hıv meg ma sik konstruktort, akkor implicit mÖ don egy parameter nelkűli super()
hıva s kerűl bele; ha nincs parameter nelkűli konstruktora a szűl˝nek, akkor fordıta si hiba. ö Az implicit konstruktor űres, teha t abba is bekerűl implicit super. public class SzınesPont extends Pont { int szın = 0; ... }
implicit genera lÖ dik: public SzınesPont() { super(); } public class Negyzet { int oldal; public Negyzet( int oldal ){ this.oldal = oldal; } }
ö A super megel˝zi az oszta lydefinıciÖ ban szerepl˝ pelda nyva ltozÖ inicializa la sokat, a tobbi resze a konstruktornak viszont csak uta nuk jon. ö Egy protected konstruktort csak super-kent lehet meghıvni a csomagon kıvűl, new-val csak csomagon belűl lehet.
public class SzınesNegyzet extends Negyzet { int szın = 0; }
Feladat ö A Pont es Kor oszta lyokhoz keszıts konstruktorokat. A Pont oszta lyhoz csak egyet, aminek a koordina ta kat lehet a tadni. A Kor oszta lyhoz ha rmat: í aminek a suga r mellett egy Pont objektumot, í illetve a kozeppont koordina ta it lehet a tadni, í valamint egy parameter nelkűli konstruktort
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Melyik Kor konstruktor hıvhat meg egy ma sikat? Mit jelentenek a kűlonboz˝ lehet˝segek? ö Miert nem fordul a SzınesPont oszta ly? Javıtsd...
Inicializa lÖ blokkok ö Utasıta sblokk a tagok (pelda ny- es oszta lyszint“ va ltozÖ k es metÖ dusok) es konstruktorok kozott, az oszta lydefinıciÖ n belűl.
ö Oszta lyinicializa tor es pelda nyinicializa tor (az utÖ bbi csak a Java 1.1 Ö ta). Az oszta lyszint“ inicializa tor a static kulcsszÖ val kezd˝dik.
class Szamozott { static int kovetkez˝ = 0; public final int SORSZAM = kovetkez˝++; int fact; { fact = 1; for (int j=2; j<=SORSZAM; j++) fact *= j; } ...
class A { static int i = 10, ifact; static { ifact = 1; for (int j=2; j<=i; j++) ifact *= j; } ... }
}
19 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
ö oszta lyszint“ inicializa tor: az oszta ly inicializa ciÖ jakor fut le, az oszta lyszint“ konstruktorokat helyettesıti (hiszen olyanok nincsenek) ö pelda nyinicializa tor: pelda nyosıta skor fut le, a konstruktorokat egeszıti ki; pl. oda ırhatjuk azt, amit minden konstruktorban vegre kell hajtani (nevtelen oszta lyokna l is jÖ , mert ott nem lehet konstruktor) ö tobb inicializa lÖ blokk is lehet egy oszta lyban ö vegrehajta s (mind oszta ly-, mind pelda nyszinten): a va ltozÖ k inicializa la sa val osszefesűlve, definia la si sorrendben; nem hivatkozhatnak kes˝bb definia lt va ltozÖ kra ö nem lehet benne return utasıta s ö a pelda nyinicializa tor az oszta ly konstruktora el˝tt fut le, de az ˝soszta lyok konstruktora uta n ö nem szoktuk a "tagok" koze sorolni
Destruktorok... ö ...ma rpedig nincsenek, hiszen szemetgy“jtes van ö megis, tudoma st szerezhetűnk az objektum megsemmisıteser˝l, ami fontos bizonyos applika ciÖ kna l ö finalize metÖ dust kell ırni (az Object-ben van definia lva). Adott forma... protected void finalize() throws Throwable { ... }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
"Destruktorok" oszta lyokhoz ö oszta lyszinten is van ilyen: static void classFinalize() throws Throwable { ... }
ö ha ma r nem rendelkezik pelda nyokkal, es ma s mÖ don sem hivatkoznak ra , akkor az oszta ly torolhet˝
ö pontosan nem definia lt, hogy mikor hıvÖ dik meg: ami biztos, hogy a ta rterűlet u jrafelhaszna la sa el˝tt
O rokl˝des megint ö az orokl˝des reven kÖ d-u jrafelhaszna la s jon letre, ami í a kÖ d redundancia ja t csokkenti í nem csak a programoza st konnyıti meg, hanem az olvashatÖ sa got es a karbantarthatÖ sa got is noveli
ö az orokl˝des nem csak kÖ dmegoszta st jelent, hanem altıpus kepzest is í tervezesi szint“ fogalom
Altıpusossa g ö egy parcia lis rendezes ö a gyermek rendelkezik a szűl˝ osszes attribu tuma val ö minden esemenyre reaga lni tud, amire a szűl˝ ö ezert minden olyan helyzetben, amikor a szűl˝t haszna lhatjuk, haszna lhatjuk a gyermeket is: í a gyermek tıpusa a sz¨ lö tıpusanak egy altıpusa í (hiszen a tıpus = megszorıta s arra, hogy egy erteket milyen helyzetben szabad haszna lni)
20 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pelda: F˝nok resze Alkalmazott ö az Alkalmazott m“veleteit meghıvhatjuk egy F˝nokre is F˝nok f = new F˝nok("Jancsi",20000); f.fizetestEmel(20000); int i = (new F˝nok("Juliska")).fizetes();
ö egy Alkalmazott forma lis parameternek a tadhatÖ egy F˝nok aktua lis Alkalmazott a = new Alkalmazott("Fredi"); if( a.tobbetKeresMint(new F˝nok("Beni")) ) ...
ö egy Alkalmazott tıpusu referencia nak ertekűl adhatÖ egy F˝nok pelda ny Alkalmazott a = new F˝nok("Winnetou");
Polimorfizmus: Cardelli-Wegner ö univerza lis í parametrikus í altıpus (inclusion)
ö ad-hoc í tıpuskenyszerıtes (coercion) í nevek tu lterhelese (overloading)
Polimorfizmus, tobbalaku sa g ö ugyanaz a m“velet meghıvhatÖ Alkalmazottal es F˝nokkel egyara nt: tobb tıpussal rendelkezik a m“velet ö egy rogzıtett tıpusu (pl. Alkalmazott) va ltozÖ hivatkozhat tobb kűlonboz˝ tıpusu objektumra (Alkalmazott, F˝nok) ö ez a fajta polimorfizmus az u n. altıpus polimorfizmus (subtype vagy inclusion polimorfizmus). Van ma sfele is, pl. parametrikus polimorfizmus, ami az Ada generic-re hasonlıt
Pelda parametrikus polimorfizmusra (Ada) generic type T is private; procedure Swap ( a, b: in out T ) is c: T := a; begin a := b; b := c; end Swap; procedure IntegerSwap is new Swap(Integer); procedure BooleanSwap is new Swap(Boolean); ... a: Integer := 42; b: Integer := 33; ... IntegerSwap(a,b);
Pelda parametrikus polimorfizmusra (funkciona lis nyelvek, pl. Clean) swap :: (a,a) -> (a,a) swap (x,y) = (y,x) swap (42,33) eredmenye (33,42)
Java tutorial Copyright á 2000-2001, Kozsik Tama s
21 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Va ltozÖ k tıpusa statikus: a va ltozÖ deklara ciÖ ja ban megadott tıpus dinamikus: a va ltozÖ a ltal hivatkozott objektum tenyleges tıpusa
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Object tıpusu va ltozÖ k ö felelnek meg a tıpus nelkűli mutatÖ knak í mindenre hivatkozhatnak, ami nem primitıv tıpusó Object o = new Alkalmazott("Olga"); o = new Kor();
nem megy:
o.fizetestEmel(20000); Alkalmazott a = o;
Kűlonbseg az altıpusossa g es a kÖ dkiterjesztes kozott ö Pelda: í a Negyzet az altıpusa a Teglalapnak í a Teglalap megkaphatÖ a Negyzetb˝l u jabb adattagok felvetelevel
ö az OO nyelvek tobbsege nem tesz kűlonbseget a kett˝ kozott, mindkett˝t ugyanazzal a nyelvi eszkozzel (orokl˝des) ta mogatja k ö inka bb az altıpusossa g mellett definia ljunk orokl˝dest
ö a dinamikus mindig a lesza rmazottja a statikusnak (vagy maga a statikus) ö a statikus tıpus a llandÖ , de a dinamikus tıpus va ltozhat a futa s sora n Alkalmazott a = new Alkalmazott("Adel"); Fonk b = new Fonk("Balazs"); Alkalmazott c = new Fonk("Cecil"); a = c; a = new Alkalmazott("Andras"); a = b;
A statikus tıpus szerepe ö Egy objektumreferencia (vagy objektum kifejezes) statikus tıpusa donti el azt, hogy mit szabad csina lni az objektummal í pl. azt, hogy milyen m“veletek hıvhatÖ k meg ra
ö Nem szabad pelda ul az ala bbiakat, mert fordıta si hiba: Object o = new Alkalmazott("Olga"); o.fizetestEmel(20000); Alkalmazott c = new F˝nok("Cecil"); F˝nok b = c;
Java-ban: Er˝s (strong) tıpusellen˝rzes ö igyekszik fordıta si id˝ben tıpushelyesseget biztosıtani (static typing) ö esetenkent futa si idej“ ellen˝rzeseket is csina l (dynamic typing)
í tisztabb tervezeshez vezet (esetleg felesleges kÖ d a ra n, mint pl. Negyzetben a "b")
22 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Automatikus tıpuskonverziÖ TıpuskonverziÖ ö automatikus (implicit) ö explicit
ö altıpusok eseten í szu kebb halmazba tartozo erteket egy búvebb halmazba tartozo ertekkekonvertal 1) objektumok eseten: egy lesza rmazott oszta lyba tartozÖ objektumot az ˝soszta lyba tartozÖ kent kezel int i = (new F˝nok("Juliska")).fizetes(); 2) primitıv tıpusok eseten is definia l a nyelv altıpusokat, ıgy: b < c|s < i < l < f < d az l < f eseten informa ciÖ vesztes lehet (pontossa g) b = 12 is jÖ , egesz litera lt fordıta si id˝ben ba jtta tud alakıtani a reprezenta ciÖ t meg kell va ltoztatni
Explicit tıpuskonverziÖ : tıpuskenyszerıtes ö ö ö ö
búvebbúl szu kebbet csinal: adatvesztú, nem biztonsagos pl. float-bÖ l int-et: Math oszta ly kerekıt˝ m“veletevel pl. egeszek sz“kıtese eseten a fels˝ bitek vesznek el objektumok eseten: ha hiba, akkor ClassCastException megel˝zes: instanceof opera tor Object o = new Alkalmazott("Olga"); Alkalmazott a = (Alkalmazott) o; ((Alkalmazott)o).fizetestEmel(20000);
Feladat ö Keszıtsd el a SzınesKor oszta lyt a Kor oszta ly lesza rmazottjakent. j m“veletei: a szın bea llıta sa es lekerdezese. ö Ne vezess be u j adattagot: a szınes korok szınet a kozeppontjuk szıne hata rozza meg, amely nem kozonseges pont, hanem szınes pont.
if( o instanceof Alkalmazott ) ((Alkalmazott)o).fizetestEmel(20000);
Nevek u jrahasznosıta sa ö Felűldefinia la s (redefining)
Java tutorial
í orokl˝des menten
ö Tu lterheles (overloading) Copyright á 2000-2001, Kozsik Tama s
í va ltozÖ vs. metÖ dus (za rÖ jelek) í metÖ dus vs. metÖ dus (parameterezes)
ö Elfedes í pelda nyva ltozÖ vs. metÖ dus parametere (this)
23 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Tu lterhelesre pelda ö Ugyanolyan nevvel tobb m“velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra...
Tu lterhelesre pelda ö Ugyanolyan nevvel tobb m“velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra... class Alkalmazott {
class Alkalmazott {
void fizetestEmel(){ fizetes += 1000; }
void fizetestEmel(){ ... }
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
void fizetestEmel( int mennyivel ){ ... } }
...
}
...
Tu lterhelesre pelda
Tu lterhelesre pelda
public static void main( String args[] ){ Alkalmazott a = new Alkalmazott(); a.fizetestEmel(1500); a.fizetestEmel(); }
ö Ugyanolyan nevvel tobb m“velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra... class Alkalmazott {
}
class Alkalmazott {
void fizetestEmel(){ fizetestEmel(1000); }
void fizetestEmel(){ fizetestEmel(1000); }
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
void fizetestEmel( int mennyivel ){ fizetes += mennyivel; }
...
...
}
Felűldefinia la s
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö a gyermek oszta lyban bizonyos esemenyekre ma skepp kell (vagy legala bbis lehet) reaga lni, mint a szűl˝oszta lyban: ö a szűl˝- (vagy ˝s)oszta lybeli metÖ dust felűldefinia ljuk a gyermekben class Teglalap { ... double kerőlet() { return 2*(a+b); } } class Negyzet extends Teglalap { ... double kerőlet() { return 4*a; } }
ö orokolt metÖ dushoz u j definıciÖ t rendelűnk ö csak pelda nymetÖ dusok eseten
24 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Ha ma st kell csina lnia...
Az orokolt metÖ dus ö haszna lhatÖ a super.valami() is a felűldefinia lt metÖ dus eleresere
class Alkalmazott { ... int pÓtlek() { return nyelvvizsgakSzama*5000; } }
class Alkalmazott { ... int pÓtlek() { return nyelvvizsgakSzama*5000; } }
class F˝nok extends Alkalmazott { ... int pÓtlek() { return nyelvvizsgakSzama*5000 + beosztottakSzama*1000; } }
class F˝nok extends Alkalmazott { ... int pÓtlek() { return super.pÓtlek() + beosztottakSzama*1000; } }
Feladat ö Keszıts toString m“veletet a Pont es a SzınesPont oszta lyokhoz, mely az ilyen objektumokrÖ l adatokat szolga ltat egy String forma ja ban. (Az adatok az attribu tumok ertekei legyenek.) A metÖ dus az ala bbi specifika ciÖ val rendelkezzen: public String toString()
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Dinamikus kotes (late binding) ö mindig a dinamikus tıpus szerinti m“velet hıvÖ dik meg ö futa s kozben va lasztÖ dik ki az a metÖ dus, ami vegrehajtÖ dik ö C++ virtual -Java: teljesen dinamikus Alkalmazott a = new Alkalmazott(...); F˝nok f = new F˝nok(...); int i = a.pÓtlek(); int j = f.pÓtlek(); a = f; int k = a.pÓtlek();
ö meg az orokolt metÖ dus torzseben is dinamikus kotes van class Alkalmazott { ... int teljesFizetes() { return fizetes() + pÓtlek(); } }
Feladat ö A Pont oszta lyban definia ljunk println metÖ dust, mely kiırja a pontot a szabva nyos kimenetre. (Ehhez, implicit mÖ don, az el˝z˝ feladatban ırt toString metÖ dust haszna ljuk.) ö Nezzűk meg, hogyan m“kodik az orokolt println metÖ dus a SzınesPont objektumokon!
25 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Felűldefinia la s szaba lyai ö a szignatu ra megegyezik ö a visszateresi tıpus megegyezik ö a hozza feresi kategÖ ria: nem sz“kıthet˝ private < felnyilva nos < protected < public
ö specifika lt kiva lthatÖ kivetelek: nem b˝vıthet˝ ha a szignatö ra ugyanaz, akkor mar nem lehet tö lterheles, ezert ha a t¨ bbi feltetel nem oke, akkor fordıtasi hiba
Java tutorial Copyright á 2000-2001, Kozsik Tama s
protected Integer add( Vector v ) throws A, B {...} public
Legyen:
Integer add( Vector v ) throws C {...}
class C extends A {...}
Altıpusossa g egy megkozelıtese
ö "types as sets", tıpusertekhalmazok tartalmaza sa ö az altıpusu ertek mindig haszna lhatÖ , ha a b˝vebb tıpusu kell ö kontra- es kovariancia, invariancia class X { Integer add( Vector v ) throws A, B {...} ... }
class Y extends X { public Integer add( Vector v ) throws C {...} } X x = new X(); class C extends A {...} Y y = new Y(); Vector v = new Vector();
A legfontosabb/legelterjedtebb OO nyelvek ö Simula 67 ö Smalltalk ö C++ ö Eiffel ö Java
... x.add(v) ... y.add(v) ...
Variancia
Variancia
m“velet parameter: invariancia (pl. Java)
m“velet parameter: kontra-variancia (nem Java!)
class Gyerek { ... }
class Gyerek { ... }
class Sıel˝ extends Gyerek { void szobatarsatRendel( Sıel˝ szobatars ){ ... } Sıel˝ szobatars(){ ... } ... }
class Sıel˝ extends Gyerek { void szobatarsatRendel( Sıel˝ szobatars ){ ... } Sıel˝ szobatars(){ ... } ... }
class Sıel˝Lany extends Sıel˝ { void szobatarsatRendel( Sıel˝ szobatars ){ ... } Sıel˝ szobatars(){ ... } ... }
contra-class Sıel˝Lany extends Sıel˝ { void szobatarsatRendel( Gyerek szobatars ){ ... } Sıel˝Lany szobatars(){ ... } ... }
26 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Variancia m“velet parameter: ko-variancia (pl. Eiffel, nem Java!) class Gyerek { ... } class Sıel˝ extends Gyerek { void szobatarsatRendel( Sıel˝ szobatars ){ ... } Sıel˝ szobatars(){ ... } ... } co-class Sıel˝Lany extends Sıel˝ { void szobatarsatRendel( Sıel˝Lany szobatars ){ ... } Sıel˝Lany szobatars(){ ... } ... }
Pelda kontravariancia ra (NEM JAVA!) Gyerek gy = new Gyerek(); Sıel˝ s1 = new Sıel˝(), s2 = new Sıel˝(); Sıel˝Lany slany = new Sıel˝Lany(); slany.szobatarsatRendel(gy); s1.szobatarsatRendel(s2); s1.szobatarsatRendel(slany); s1 = slany; s1.szobatarsatRendel(s2);
A ltala ban megengedhet˝ lenne m“velet felűldefinia la sa eseten ö kontravariancia (ellentetes va ltoza s) az alprogram parametereben í a parameter tıpusa b˝vebb: tobb parametert elfogadÖ
ö a visszateresi ertek tıpusa ra kovariancia í a visszateresi ertek sz“kebb: nem ad olyat vissza, amit az ˝sbeli sem
ö ahol egy bennfoglalÖ tıpusu valamit haszna lok, ott lehet helyette egy altıpusbelit haszna lni; s˝t, meg tobb kornyezetben haszna lhatom az altıpusbelit, hiszen az specia lisabb, tobb informa ciÖ t hordozÖ
Eiffel-ben (Bertrand Meyer) megengedett m“velet felűldefinia la sa eseten ö kovariancia (egyűttva ltoza s) a felűldefinia lt alprogram parametereben í az altıpusbeli m“veletben a szűl˝beli parametertıpusa nak egy altıpusa szerepel
ö a visszateresi ertek tıpusa ra is kovariancia Sıel˝ s1 = new Sıel˝(), s2 = new Sıel˝(); Sıel˝Lany slany = new Sıel˝Lany(); s1.szobatarsatRendel(s2); s1 = slany; s1.szobatarsatRendel(s2); NEM J츐!
Meg egy pelda Eiffel-b˝l ö Egy altıpusbÖ l elhagyhatÖ k ba zistıpusbÖ l orokolt m“veletek. ö Ez megserti azt a szaba lyt, hogy az altıpusu ertek mindig haszna lhatÖ ott, ahol a ba zistıpusu ertek. ö Bizonyos esetekben programoza stechnikailag kenyelmes tud lenni. Pelda ul:
Java tutorial Copyright á 2000-2001, Kozsik Tama s
a Mada r repűl a Pingvin nem repűl
27 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Visszaterve a Java-hoz ö invariancia (nem-va ltoza s) az alprogram parametereben í az altıpusban a parameter tıpusa ugyanaz, mint a szűl˝ben
ö visszateresi ertekre is invariancia ö viszont kivetelekre (specia lis visszateresi ertek) ko-variancia, es la thatÖ sa gra (ami a parameterekre hasonlıt) kontra-variancia ö tu lterheles: a szignatu ra kűlonboz˝, teha t azt definia lja felűl, amivel megegyezik a szignatu ra ö felűldefinia la sna l igyekezzűnk meg˝rizni a jelentest, inka bb csak a kisza mıta s mÖ dja legyen ma s
Heterogen adatszerkezetek ö Egy adatszerkezetben tobbfele oszta lyu objektumot szeretnenk ta rolni. í neha jÖ , neha nem
ö Pelda ul a predefinit Vector oszta lyban Object-ek vannak. ö Egy tombbe is tehetűnk kűlonboz˝ket egy k z s ö stıpus alapja n. Test[] t = {new Kocka(42.0),new Gomb(33.0) };
a statikus tıpus ugyanaz, a dinamikus tıpus elterhet
Tu lterheles: va laszta s a va ltozatok kozott
ö ha a szignatu ra ban szerepl˝ tıpusok ˝slesza rmazott viszonyban a llnak í í í í í í í
fordıta si id˝ben tortenik a va laszta s az aktua lis parameterek statikus tıpusa dont altıpusossa g lehetseges "legjobban illeszked˝" fordıta si hiba, ha nincs tıpuskenyszerıtes rossz stılus, kerűlend˝ a tobbertelm“seg void m(Alkalmazott a1, Alkalmazott a2) { ... } void m(Alkalmazott a, Fonok f) { ... } void m(Fonok f, Alkalmazott a) { ... }
Elfedes ö oszta lyszint“ metÖ dusokna l nincs felűldefinia la s + dinamikus kotes ö a statikus metÖ dusokat elfedni lehet ö nem csak a szignatu ra nak kell megegyezni, hanem... hasonlÖ szaba lyok mint felűldefinia la sna l, kűlonben fordıta si hiba class A { static void alma(int x){ ... } } class B extends A { static void alma(int x){ ... } }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Oszta lymetÖ dus elfedese elfedett elerese: 1 super 1 min˝sıtes 1 tıpuskenyszerıtes
Alkalmazott a = new Alkalmazott(); F˝nok f = new F˝nok(); a.nyugdıjKorhatar() f.nyugdıjKorhatar() Alkalmazott.nyugdıjKorhatar() ((Alkalmazott)f).nyugdıjKorhatar()
class Alkalmazott { ... static public int nyugdıjKorhatar() { return 65; } static public int A_nyugdıjKorhatar() { return nyugdıjKorhatar(); } } class F˝nok extends Alkalmazott { ... static public int nyugdıjKorhatar() { return super.nyugdıjKorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; } }
28 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
statikus kiva laszta s Alkalmazott a = new Alkalmazott(); 1
(fordıta si id˝ben)
elfedett elerese 1
orokolt metÖ duson keresztűl
F˝nok f = new F˝nok();
a.nyugdıjKorhatar() f.nyugdıjKorhatar() a = f; a.nyugdıjKorhatar() a.fizetes() a.A_nyugdıjKorhatar()
class Alkalmazott { ... static public int nyugdıjKorhatar() { return 65; } static public int A_nyugdıjKorhatar() { return nyugdıjKorhatar(); } } class F˝nok extends Alkalmazott { ... static public int nyugdıjKorhatar() { return super.nyugdıjKorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; } }
Va ltozÖ k elfedese ö pelda ny- vagy oszta lyszint“ va ltozÖ k eseten ö statikus kiva laszta s ö az elfedett va ltozÖ khoz nem lehet kozvetlenűl hozza ferni, csak í í í í
super-es min˝sıtessel tıpusos min˝sıtessel (oszta lyva ltozÖ eseten) tıpuskenyszerıtessel orokolt metÖ duson keresztűl
pelda nymetÖ dust nem szabad elfedni class Alkalmazott { ... static public int nyugdıjKorhatar() { return 65; } static public int A_nyugdıjKorhatar() { return nyugdıjKorhatar(); } } class F˝nok extends Alkalmazott { ... static public int nyugdıjKorhatar() { return super.nyugdıjKorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; } static float nyugdıjKorhatar() { ... } NEM JO! static int fizetes(){...} NEM JO! }
Pelda pelda nyva ltozÖ elfedesere class a { int x = 0; void pr() { System.out.println(x); } } class b extends a { int x = 1; void pri(){ System.out.println(super.x); } static public void main( String[] args ){ a v = new b(); b w = new b(); System.out.println(v.x + " " + w.x); System.out.println(((a)w).x); v.pr(); w.pr(); w.pri(); } }
A final mÖ dosıtÖ szÖ Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö "nem va ltoztathatÖ " í va ltozÖ (pelda ny, oszta lyszint“, loka lis, parameter) í metÖ dus (pelda ny, oszta lyszint“) í oszta ly
29 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
final va ltozÖ k ö kva zi konstansok í nem va ltoztathatÖ a va ltozÖ erteke, ha ma r egyszer bea llıtottuk í final double ADOKULCS = 0.25;
final va ltozÖ k ö kva zi konstansok í nem va ltoztathatÖ a va ltozÖ erteke, ha ma r egyszer bea llıtottuk í final double ADOKULCS = 0.25;
ö űres konstansok (a fordıtÖ eszreveszi a hiba t) final static int i = 100; final static int ifact; static { int j = 1; for(int k=1; k<100; k++) j *= k; ifact = j; }
final va ltozÖ k ö kva zi konstansok í nem va ltoztathatÖ a va ltozÖ erteke, ha ma r egyszer bea llıtottuk í final double ADOKULCS = 0.25;
ö űres konstansok (a fordıtÖ eszreveszi a hiba t) final static int i = System.in.read(); final static int ifact; static { int j = 1; for(int k=1; k<100; k++) j *= k; ifact = j; }
U res konstans erteke konstruktorokbÖ l final String nev; public Alkalmazott( String nev ){ this(nev,100000); } public Alkalmazott( String nev, int fizetes ){ this.nev = nev; this.fizetes = fizetes; }
final va ltozÖ : a referencia nem va ltozhat class A { int v = 10; public static void main( String args[] ){ final A a = new A(); a = new A(); // NEM SZABAD! a.v = 11; }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
}
30 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
final metÖ dus es oszta ly ö "nem va ltoztathatÖ " í nem lehet fel¨ ldefinialni, illetve leszarmaztatni belö le public class Object { public final Class getClass(); ... }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
public final class System { ... }
Pl. ha veszelybe sodorna a rendszer m“kodeset...
Absztrakt oszta lyok ö hia nyosan definia lt oszta ly (valami nincs benne keszen)
Absztrakt oszta lyok ö hia nyosan definia lt oszta ly (valami nincs benne keszen) í bizonyos m“veleteknek meg nem adjuk meg az implementa ciÖ ja t
ö nem lehet bel˝le pelda nyosıtani
ö nem lehet bel˝le pelda nyosıtani
ö az altıpus rela ciÖ megada sa tervezes szempontja bÖ l sokszor megkıva nja
ö az altıpus rela ciÖ megada sa tervezes szempontja bÖ l sokszor megkıva nja
Absztrakt oszta lyok
Absztrakt oszta lyok
ö hia nyosan definia lt oszta ly (valami nincs benne keszen)
ö hia nyosan definia lt oszta ly (valami nincs benne keszen)
í bizonyos m“veleteknek meg nem adjuk meg az implementa ciÖ ja t
í bizonyos m“veleteknek meg nem adjuk meg az implementa ciÖ ja t
í az abstract mÖ dosıtÖ szÖ val jelezzűk
í az abstract mÖ dosıtÖ szÖ val jelezzűk
ö nem lehet bel˝le pelda nyosıtani
ö nem lehet bel˝le pelda nyosıtani
ö az altıpus rela ciÖ megada sa tervezes szempontja bÖ l sokszor megkıva nja
ö az altıpus rela ciÖ megada sa tervezes szempontja bÖ l sokszor megkıva nja í csak azert kellenek, hogy "igazi" oszta lyok kozos viselkedeset csak egyszer kelljen leırni, vagy hogy "igazi" oszta lyok kozos ˝ssel rendelkezzenek
31 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
public abstract class Gyerek { protected Jatek kedvencJatek; // es egyeb attributumok ... public abstract double mennyireSzereti(Gyerek masik); public Gyerek legjobbBarat( Gyerek[] osztaly ){ int maxhely = 0; double maxertek = mennyireSzereti(osztaly[0]); for( int i = 1; i
maxertek ) { maxertek = ertek; maxhely = i; } } return osztaly[maxhely]; } } Gyerek gyerek = new Gyerek();
public abstract class Gyerek { protected Jatek kedvencJatek; // es egyeb attributumok ... public abstract double mennyireSzereti(Gyerek masik); public Gyerek legjobbBarat( Gyerek[] osztaly ){ ... } } public class Fiu extends Gyerek { ... public double mennyireSzereti(Gyerek masik){ double osszeg = 0.0; if( kedvencJatek.equals(masik.kedvencJatek) ) 10.0; ... return osszeg; } }
osszeg +=
public class Lany extends Gyerek { ... public double mennyireSzereti(Gyerek masik){ if( masik.kedvencJatek.equals(Jatek.doglottMacska) ) return 0.01; if( masik.kedvencJatek.equals(Jatek.hajasBaba) ) return 12.0; ...
Feladat ö ValÖ sıtsd meg a Hasa b absztrakt oszta lyt. Tulajdonsa g: magassa g. Absztrakt m“velet: alapterűlet sza mıta sa. Ma sik m“velet: terfogat sza mıta sa. ö Keszıtsd el a Henger es Kocka oszta lyokat, melyek a Hasa b konkret lesza rmazottjai.
public abstract class Hasab { protected double magassag; public abstract double alapterőlet(); public double terfogat(){ return alapterőlet() * magassag; } } public class Henger extends Hasab { ... // konstruktorok protected double sugar; public double alapterőlet(){ return sugar*sugar*Math.PI; } } public class Kocka extends Hasab { ... // konstruktorok public double alapterőlet(){ return magassag*magassag; } }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Absztrakt oszta lyok: osszegezve ö nem pelda nyosıthatÖ kozvetlenűl, el˝bb specializa lni kell (megvalÖ sıtani az absztrakt m“veleteket) ö a gyerek is lehet absztrakt í aka r absztrakt a szűl˝, aka r nem
ö absztrakt statikus tıpussal rendelkez˝ va ltozÖ k hivatkozhatnak valamilyen lesza rmazott konkret dinamikus tıpusu objektumra í dinamikus kotes hıva skor
ö egy absztrakt metÖ dus nem lehet private, final vagy static (sem native)
Hasab h = new Kocka(10.0);
32 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Tobbszoros orokl˝des ö egy oszta ly tobb oszta lytÖ l is orokolhet
Java tutorial Copyright á 2000-2001, Kozsik Tama s
í az oszta lyhierarchia egy ira nyıtott kormentes gra f (de nem feltetlenűl fa vagy erd˝) í pelda ul: ReszegesEgyetemista, Ketelt“Ja rm“, SzınesNegyzet
ö vita a szakirodalomban í nagyon hasznos dolog í problema kat vet fel (a llıtÖ lag)
ö Java: kompromisszum (jÖ ? nem jÖ ?) í osztalyokra egyszeres ¨ r¨ klúdes, de...
Tobbszoros orokl˝des "problema i" ö ugyanolyan attribu tum/metÖ dus tobbszorosen í class D extends B, C í B.valami C.valami í felűldefinia la skor D.valami
ö ismetelt orokl˝des: ugyanaz tobbszor í class B extends A í A.valami
class C extends A
Interfesz: "absztrakt" ö teljesen absztrakt, egya ltalan nincs benne "kÖ d", csak specifika ciÖ í pl. nincs metÖ dustorzs vagy pelda nyva ltozÖ benne public interface Enumeration { public boolean hasMoreElements(); public Object nextElement(); }
Interfeszek ö egy ma sik referencia tıpus ö az absztrakt oszta lyok definıciÖ ja ra hasonlıt ö tıpusspecifika ciÖ -szer“seg ö tobbszoros orokl˝des (altıpus rela ciÖ ) ö nem u j dolog, Objective-C protocol
Interfesz: nem pelda nyosıthatÖ ö ugyanu gy, mint az absztrakt oszta lyok: nem pelda nyosıthatÖ kozvetlenűl ö el˝bb "meg kell valÖ sıtani" class ListaIterator implements Enumeration { ... public boolean hasMoreElements(){ ... } public Object nextElement(){ ... } } HalmazIterator TombIteraror SorozatIterator
stb...
33 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Interfesz: orokl˝des ö Interfeszek is kiterjeszthetik egyma st: extends ö Aka r tobbszoros orokl˝des is lehet í ha a kÖ dorokles szintjen gondot is okozhat a tobbszoros orokl˝des, azert a specifika ciÖ orokl˝dese eseten nem
ö Az oszta lyok megvalÖ sıthatnak interfeszeket í ugyanazt az interfeszt tobben is í ugyanaz az oszta ly tobbet is
Rela ciÖ k a referencia-tıpusokon ö O rokl˝des oszta lyok kozott í fa (egyszeres orokl˝des, kozos gyoker) í kÖ dorokles
ö O rokl˝des interfeszek kozott í kormentes gra f (tobbszoros orokl˝des, nincs kozos gyoker) í specifika ciÖ oroklese
ö MegvalÖ sıta s oszta lyok es interfeszek kozott í kapcsolat a ket gra f kozott, tova bbra is kormentes í specifika ciÖ oroklese
Interfesz megvalÖ sıta sa ö Ha az I egy interfesz, J az I egyik ˝se, az A oszta ly megvalÖ sıtja I-t, B lesza rmazottja az A-nak,
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö akkor B megvalÖ sıtja J-t.
Interfesz: tıpus ö haszna lhatÖ k va ltozÖ deklara ciÖ kban ö haszna lhatÖ k forma lis parameterek specifika ciÖ ja ban
Interfesz: tıpus ö haszna lhatÖ k va ltozÖ deklara ciÖ kban ö haszna lhatÖ k forma lis parameterek specifika ciÖ ja ban ö egy interfesz tıpusu va ltozÖ : í referencia, ami olyan objektumra mutathat, amely oszta lya (kozvetlenűl vagy kozvetve) megvalÖ sıtja az interfeszt I v = new A(); J w = new B();
34 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Interfesz: tıpus ö haszna lhatÖ k va ltozÖ deklara ciÖ kban ö haszna lhatÖ k forma lis parameterek specifika ciÖ ja ban ö egy interfesz tıpusu forma lis parameter:
Java tutorial Copyright á 2000-2001, Kozsik Tama s
í megadhatÖ egy olyan aktua lis parameter, amely egy objektum, es amely oszta lya (kozvetlenűl vagy kozvetve) megvalÖ sıtja az interfeszt void m( I p ){...} void n( J p ){...}
m(new A()); n(new B());
Ha egy va ltozÖ (vagy forma lis parameter) deklara lt tıpusa (azaz statikus tıpusa) egy interfesz, akkor ö dinamikus tıpusa egy azt megvalÖ sıtÖ oszta ly í csak ennyit haszna lhatunk ki rÖ la
ö a va ltozÖ ra olyan m“veleteket haszna lhatunk, amelyek az interfeszben (kozvetlenűl vagy kozvetve) definia lva vannak void elemeketKiır( Enumeration e ){ while( e.hasMoreElements() ) System.out.prinln(e.nextElement()); } Vector v; ... elemeketKiır( v.elements() );
MetÖ dusok az interfeszekben ö haszna lhatÖ mÖ dosıtÖ k: í abstract es public (automatikusan, nincs hata suk)
ö nem haszna lhatÖ k: í í í í í
protected private static final (native, synchronized)
Interfeszek megada sa ö mÖ dosıtÖ szÖ k: í abstract (Automatikusan, azaz nincs hata sa. Nem szoka s.) í public (Mint oszta lyokna l; tobb csomag eseten erdekes.) ö kiterjesztes (orokl˝des): í extends uta n lista ö pelda nymetÖ dusok specifika ciÖ ja es oszta lyszint“ konstansok í nem lehetnek benne űres konstansok ö Az interfeszek neve gyakran -hatÖ , -het˝ (azaz -able) Comparable, Runnable (FuttathatÓ)
Va ltozÖ deklara ciÖ k az interfeszekben ö haszna lhatÖ mÖ dosıtÖ k: í public final static (automatikusan, nincs hata suk)
ö nem haszna lhatÖ k: í protected í private í (volatile, transient)
35 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Interfeszt megvalÖ sıtÖ oszta ly ö az oszta lyban egy implements klÖ z, benne tobb interfesz felsorolhatÖ ö a metÖ dusok megvalÖ sıta sa public kell, hogy legyen ö a konstansok specifika ciÖ ja t termeszetesen nem kell megismetelni
Nevűtkozes ö va ltozÖ k ö metÖ dusok
ö orokl˝des sora n u jabb entita s ugyanazzal a nevvel vagy szignatu ra val ö tobbszoros orokl˝des sora n tobb helyr˝l is
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Nevűtkozesek va ltozÖ deklara ciÖ kban ö elfedes ö eleres min˝sıtesen keresztűl ö ha tobbszorosen orokolt í ha ugyanaz tobb u ton, akkor csak egy lesz bel˝le í ha ma sik, akkor a hivatkoza sna l fel kell oldani a tobbertelm“seget, kűlonben fordıta si hiba
í tobb helyr˝l, de ugyanazt
Nevűtkozesek metÖ dusokna l ö lehet tu lterheles (kűlonboz˝ szignatu ra) ö lehet felűldefinia la s, ha a szignatu ra megegyezik; ilyenkor kell meg (kűlonben fordıta si hiba): í visszateresi tıpus egyenl˝sege í a kiva ltott kivetelekre a szoka sos kovariancia í a hozza feresi kategÖ ria ra nincs korla toza s, hiszen minden public
Feladat ö Keszıtsd el a Szınezhet˝ interfeszt, mely m“veleteket definia l szın lekerdezesere es bea llıta sa ra. A SzınesPont es SzınesKor oszta lyok valÖ sıtsa k meg ezt az interfeszt.
ö tobbszoros orokles í ha ugyanaz, akkor egyertelm“ í ha tobb ugyanolyan szignatu ra ju , akkor a "legnagyobb kozos osztÖ " ("azt" kell venni felűldefinia la sna l es megvalÖ sıta sna l)
36 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com