5. Zertarako behar ditugu klaseak zuen ustez?
Errealitatea modelatzeko
Atributuak: zer
Metodoak: nola
Javan ia edozer da objektu bat
baina badaude programatzeko beste erak
9. Ikusgarritasuna
private
Bakarrik erabili ahal dugu definituta dagoen klasearen
barnean.
protected
Bakarrik erabili ahal dugu klase berberan, ondorengoetan
edo pakete bereko klaseetan.
public
Edonondik erabili dezakegu.
17. Atributuen herentzia
Klase baten protected edo public atributu
guztiak bere seme-alabek heredatuko dituzte
Ez private!
Seme-alabek gurasoek definitu ez dituzten
atributuak definitu ditzakete
Seme-alabek ezin dute gurasoak definitutako
atributuak kendu
18. Nola heredatu atributuak?
public class Gurasoa {
protected int atrributu1;
protected String atributu2;
...
}
...
public class SemeAlaba extends Gurasoa {
protected int atributu3;
...
}
...
Gurasoa gu = new Gurasoa();
SemeAlaba sa = new SemeAlaba();
sa.atributu1 = 24;
sa.atributu3 = 4;
// ez!!! => gu.atributu3 = 23;
21. Metodoen herentzia
protected edo public diren metodo guztiak klase
seme-alabetan heredatzen dira
private ez!
Klase seme-alabak metodo berriak definitu ditzake
Gurasotik heredatutako kodea berdefinitu dezake
Ezin du kendu, baina bai guztiz aldatu
22. Nola heredatu metodo bat? I
public class Gurasoa {
...
public void metodoa1() {
System.out.println("Gurasoan nago definituta!");
}
...
}
...
public class SemeAlaba extends Gurasoa {
... // ez du metodoa1 definitzen
}
...
SemeAlaba sa = new SemeAlaba();
sa.metodoa1();
23. Nola heredatu metodo bat? II
public class Gurasoa {
...
public void metodoa1() {
System.out.println("Gurasoan nago definituta!");
}
...
}
...
public class SemeAlaba extends Gurasoa {
...
// birdefinitu
public void metodoa1() {
System.out.println("Semean nago definituta!");
}
}
...
SemeAlaba sa = new SemeAlaba();
sa.metodoa1();
24. Super
Konstruktorean
Lehenengo sententzia klase gurasoaren konstruktorearen
deia da
super(param1, param2);
Ez bada idazten, Javak inplizituki parametrorik gabeko
konstructoreari deituko dio
super();
Edozein metodoaren barnean, ”super.” erabiliz
“this” erabiltzen dugun moduan
super.metodo1(); // aitaren ‘‘metodo1’’ deitzen du
25. Polimorfismoa
Metodo bat deitzen duen objektuaren motaren arabera era
desberdinean jokatzea ahalbidetzen duen propietatea da.
IrudiGeometrikoa fig = new Zirkulua(3);
// zirkuluaren azalera erakusten du
System.out.println(fig.area());
IrudiGeometrikoa fig = new Errektangelua(5, 7);
// Errektangeluaren azalera erakusten du
System.out.println(fig.area());
26. Bateragarritasuna
B klasea Aren semea bada, edozei B klasekoa den
edozein objektu, A klasekoa izango da baita ere
Gutxienez, B klaseko objektua A klaseko baten atributu eta
metodo berdinak izango ditu
Beraz, A klaseko objektuekin egin dezakegun edozein
gauza, B klasekoekin ere egin dezakegu
¿Eta alderantziz?
A obj1 = (A) obj2; // obj2 B klasekoa izanda
Kastinga ez du aldatzen objektuaren balioa, bakarrik
ikusten dugu ”beste ikuspegi batetik”, baina objektu bera da
Bakarrik egin dezakegu hierarkian zehar, ez ”horizontalki”
27. Bateragarritasuna
Izen berdina duten zenbait metodo existitu daiteke
Baldin eta parametro desberdinak jasotzen badute
Kasurik argienak konstruktoreak dira
public void pantailanErakutsi(String izena) {
System.out.println(izena);
}
public void pantailanErakutsi(String izena, String abizena) {
System.out.println(izena+" "+abizena);
}
28. Abstract
Kontzeptuak modelatzeko
Klase abstraktua
Ezin da instantziatu (new KlaseAbs()), baina ondorengoak
izan ahal ditu
Ez ditu zertan metodo abstraktuak eduki behar
Metodo abstraktua
Implementaziorik gabe deklaratzen den metodoa da
(giltzarik gabe, ondoren puntu eta koma bat jarriz):
abstract void moveTo(double deltaX, double deltaY);
Klase batek metodo abstraktuak baldin baditu, klase hori
abstraktua deklaratu beharko da ere.
29.
30. Galderak: bateragarritasuna (I)
Klase hierarkia hau edukita:
Eta honako objektuak baditugu...
A a = new A();
B b = new B();
C c = new C();
D d = new D();
E e = new E();
Posiblea da...
31. Galderak: bateragarritasuna (II)
A m = b;
A n = c;
B o = d;
B p = c;
B q = (B) e;
A r = (A) d;
D s = (D) a;
B t = (B) n;
C u = (C) e;
C v = (E) e;
C w = (C) a;
C y = (C) n;
C z = (C) m;
B h = (B) m;
32. Galderak: abstrakzioa
Zein izan daiteke posible?
Klase abstraktua
A abstract da, A aldagaia = new A();
A ez da abstract, baina b() abstact metodoa du
A abstract klasea da eta b() metodoa ez da abstract
A abstract da eta b() metodo abstract-a du
B ondorengoa du, eta honek e() eta d() metodoak definitzen
ditu
B aldagaia = new B();
33. Galderak: herentzia
a.a();
a.b();
Honako klase hierarkia edukita... a.d();
A klasea (a eta b metodoak) a.e();
B klasea (d metodo abstraktua) b.a();
C (e metodoa duena) b.b();
Posiblea da... b.d();
A a = new A(); b.e();
B b = new C(); c.a();
C c = new C(); c.b();
c.d();
c.e();
34. Galderak: polimorfismoa (1)
Honako hierarkia dugu
Klase abstraktua
A klasea
public A() { sysout("konstruktore1"); }
public A(String e) { sysout("konstruktore2"); }
public A(int e) { this(); sysout("konstruktore3"); }
public erakutsi() { sysout("ABC"); }
public erakutsi(String a) { sysout(a); }
B klasea (A-ren ondorengoa dena)
public B() {}
public B(String e) { super(e); }
public B(float e) { super((int) e); };
public erakutsi() { sysout("DEF"); }
public erakutsi(String a) { super.erakutsi(); }
35. Galderak: polimorfismoa (2)
Zer gertatuko litzateke...
A a = new A();
B b = new B();
A c = new A("eo");
A d = new B("eo");
B e = new B(33f);
B f = new B(33);
A g = new A(33f);
A h = new A(33);
d.erakutsi();
c.erakutsi();
b.erakutsi("aa");
a.erakutsi("eo");
Ordenagailuan frogatu!
36. Lizentzia
Irudien guztien jabetza intelektuala bere egileena* da,
gainontzeko edukiak Creative Commons by-sa 3.0
lizentziapean daude.
* heididorf, jakecaptive, ArtFavor, J. Cameron (public domain), freecat,
Marcelo Mathias Lima, owenbooth, mikebaird, ableman eta oberazzi.