Kényszerítő és túlterhelés

Átörökölje. Object osztály

Mielőtt folytatnánk a vitát az öröklés, szeretnék összpontosítani egy fontos pont. Mint láttuk, annak érdekében, hogy örökölni minden osztályban meg kell írni a szót nyúlik neve után az új osztály és az osztály neve, ahonnan szeretnénk örökölhető. De már láttunk példát, ahol nincs szó kiterjed, mi nem. Ez azt jelenti, hogy ez az osztály a „alapkőzet”. Vagy más szóval - nem örökölt vagy tetszőleges osztály összesen. Ez nem így van. A szabványos Java osztályok, van ugyanaz, „sarokköve” - az osztály objektum, amely örökölt egy osztály, melynek nincs szó húzódik. Nem megadásával származtatott osztály, akkor automatikusan mondja a fordító, hogy örökli az Object osztályban.
Ie meghatározó osztály alább felsorolt ​​azonos

public class SimpleClass <…>
public class SimpleClass kiterjed Object <…>

Használhatja mindkét formája, de a gyakorlatban senki sem ír terjed Object. Mi lesz biztos, hogy beszélni az Object osztály, amely néhány meglehetősen hasznos módszer, de most csak annyit, a létezését és a nagyon fontos szerepet játszik a teljes hierarchia osztályok - tőle végül létre az összes osztály - az ő nagyapja, dédapja, és talán prapraprapradedushka.

Kényszerítő és a túlterhelés (override és túlterhelés)

Korábban megnéztük egy példát, hogyan lehet hozzáadni alkalmassága az osztály által annak kiterjesztését (öröklés). De az osztály nem csak új funkciók létrehozásával új módszereket. Class módszerek is felülírhatja - do felülírás. Vagy túlterhelés - hogy túlterhelés. Próbáljuk megérteni, hogy mi minden távon.

Felülbírálása (override)

Újrafogalmazása akkor használjuk, amikor felülírja (változtat, felül) a meglévő módszerek. Például az Object osztályban van egy nagyon népszerű toString () metódus, ami visszaadja a húr az objektumot reprezentálja. Végrehajtásában Object eredmény meglehetősen csúnya - nevét az osztály néhány számot (úgynevezett hash-kód). Fussunk egy nagyon egyszerű példa

A legfontosabb dolog az, hogy leírja Robot osztály, vagyis egy új toString () metódust. Nézzük meg részletesebben.
Úgy kezdődik eljárás @Override titokzatos design. Ez a kialakítás az „Összefoglaló” nevezik. Használt, hogy további információkat lehet olvasni és használni. Meg fogjuk vizsgálni az összefoglaló később, már csak emlékezni, hogy a design, amely kezdődik a karakter „@” a jelöléseket, és nem kell félni :). Most csak megjegyezni, hogy a módszer, amit olyan nyomós, akkor jobb, ha előre ezt a jelölést. Ebben az esetben a fordító képes ellenőrizni, hogy felülbírálja a módszer, hanem írni egy újat. Így lehet elkerülni néhány hibák miatt a figyelmetlenség.

FONTOS. A kommentárok jelennek meg csak a Java verziót 1.5 és korábbi verziók nem támogatják őket.

Nos, akkor minden nagyon egyszerű - a cím toString módszert kell pontosan ugyanazt ugyanazzal a módszerrel az ős osztály - név, a visszatérési érték, és az opciók listája. Ebben az esetben nincs paraméterek és visszatérési értéke egy karakterlánc. Most van egy osztály, amely felülírja a meglévő módszerek őse. Így lehetséges, hogy módosítsa a funkcionalitást egy osztály és a viselkedését. És ne feledje, hogy nem használja a forráskódot az osztály objektum - ez nem így van. Ennek ellenére meg tudtuk változtatni a viselkedését. Ez egy nagy kényelmet programok kidolgozása. A hétköznapi életben, a Java programozó mindig valami örökli, felülbírálja. De meg kell jegyeznünk, néhány fontos pontot.

Nézzük példaként a mi régi barát robot. Szóval, itt van a mi robot, amely képes mozgatni egyik helyről a másikra. Tettük ezt például úgy, hogy alig kell lepni. Az egyetlen újdonság - most már tudom használni csomagokat.

Elég nehéz megérteni, hogy szükség újbóli nem veszik észre először lehetőség a módszer / s.
Megértem, hogy az építőiparban «Graphics g» írni «g» nem opció, és a neve, és lehet változtatni, hogy minden más, például: «Graphics Ovális» stb Oval átalakult egy objektumot egy sor módszerek és vsoystv.
Ennek alapján a felvétel «Oval.drawOval (5, 5, getWidth () - 10, getHeight () - 10)” ez a része a ovális egyszer adatokat tud fogadni a hossza és szélessége a penész, így közvetlenül.
Nagyon kopogtat, hogy minden tranzakció (ha nem tévedek) által a tulajdonságok és módszerek az azonos alakú, de volt, hogy írjon három osztályba. Nehéz nyomon követni a kapcsolat az osztályok között, nem veszik észre lehetőségek formájában.
Bár az út csak a példa a probléma leírására tárgyak tulajdonságait használják nem került.

Ie ha jól értettem ebben az esetben - «JComponent» egyfajta írószer készlet papír + ceruza + festő (akiknek utasításokat rajz), «Graphics» egy sor utasítást rajz + Painter manager (a beállított paraméterek) és a «JFrame» ez az asztalt, amelyen a megállapított rajzlap?

Elnézést, én is szeretnék, hogy részletesen elemzik a kódot:
@Override
védett void paintComponent (Graphics g) super.paintComponent (g);
// Használata Graphics felhívni az ovális
// tagolt
g.drawOval (5, 5, getWidth () - 10, getHeight () - 10);
>
Mentünk egy grafikus objektumot a szülő osztályban módszer, amely nélkül újbóli magát, hogy felhívja a ovális nem tudott, és ezután a beépített módszerek a szülő osztály «JComponent» számítani a szélessége és hossza a jobb?

Igen, az ötlet teljesen korrekt. Tárgyak, hogy így, és meg kell érteni.
Ott JComponent - Class-üresen. Van egy módszer paintComponent, amely fogják hívni, ha van festve. És mi van, hogy az én osztály felülírja.
Ha mélyebbre ásni, majd amikor a formát kezd rajzolni, fut az egész listát, összetevői, amit regisztrált (hívtuk a kiegészítő módszer a forma és át ezek az alkatrészek -, hogy van ez most is az). Minden komponens (mert örökösei egy osztályba komponens) okozza a festék módszer.
Belül JComponent festék eljárás meghívja paintCOmponent - ezért úgy döntött, hogy a fejlesztők, ők jobban tudják.
De ami a legfontosabb, mivel a polimorfizmus festéket a JComponent (mert nem felülírható) már MI paintComponent. Ie A osztály egy festék (mert ő volt az örökös JComponent), melynek hatására paintComponent (ez a módszer azt újra), és felszólította, hogy mi paintComponent helyett JComponent (ez a lényege polimorfizmus - egy nagyon jó futó a jövőben).

Köszönöm szépen, már olvasni a következő fejezetet, és azt Ingatlan kiadó munka már legalább részben ismert a lényege polimorfizmus. Nagyon jó ... nos, ez egy meglehetősen triviális példa (pusztán szórakozásból) - feltételezzük, van valamiféle „A” osztályú (Reporting Manager), a banki rendszer, amellyel a feladat, hogy egy másik „B” osztályú (Reports tervező), hogy egy jelentést az elvégzett munkát, és itt mi ügyesen felülírják szülő módszerek a származtatott osztály „B1” (ochotov tervező + pénzt egy számlára), majd megteszi a következő lépést a szervezet a hívás jelentés:

vonal
"B" = new «B»
változik
"B" = new «B1»

és minden egyes alkalommal, amikor kérhet jelentést létrehozásáról szóló egy kis bónusz, mint egy emelés, és jelenti az igazgató nem is veszik észre, hogy már vannak változások 🙂

Megint összpontosítani, hogy a példa a túlzott (a nevet), és az a célja, csak a kérdés, hogy jól értettem a jelentését polimorfizmus 🙂