Sziasztok!
Van egy absztrakt osztályom, amiből két másik osztályt származtattam.
Legyen az absztrakt osztály neve: BaseClass
A másik két osztály neve: ClassA, ClassB
Az absztrakt osztály definiál egy függvényt, aminek a bemenő paramétere egy BaseClass objektum.
Természetesen ez a gyakorlatban majd vagy ClassA vagy ClassB lehet.
Nos a ClassA osztályon belül, amikor implementálom a függvényt, fontos lenne eldöntenem, hogy aki meghívta a függvényt az ClassA vagy ClassB objektumot adott-e át.
@Override
public void foo(BaseClass anObject) {
if (typeof(this) == typeof(anObject)) {
// do something
} else {
// do something else
}
// ....
}
Szóval ezt szeretném megvalósítani, de nem tudom, hogyan kell java-ban.
- 1268 megtekintés
Hozzászólások
Halvány emlékeim között dereng, hogy létezik egy
instanceof
operátor, itt találhatsz példát a használatára.
--
Nagyimami
- A hozzászóláshoz be kell jelentkezni
A dolgot bevette a fordító.
Valahogy kipróbálom, hogy úgy működik-e, ahogy én gondolom.
- A hozzászóláshoz be kell jelentkezni
Számomra furcsa, hogy az ősnek tudnia kell a gyermek osztályokról. Igy ugye utólag csak az ős módosításával csinálhatsz ClassC-t. Nem lehet "lefelé" (a gyerek osztályokba) tolni a függvény által végzett teendőket? Mi a konkrét példád? Nem kötözködni akartam csak érdekel :). Egyébként a barátod az 'instanceof' operátor:
if (anObject instanceof ClassA)
- A hozzászóláshoz be kell jelentkezni
Az ősnek nem kell tudnia a leszármazott osztályokról semmit!
Én azt írtam, hogy a BaseClass egy absztrakt osztály, és a foo függvényt a leszármazott osztályokban implementálom. Tehát konkrétan a ClassA osztályban csinálom ezt a manipulációt.
Azt vizsgálom, hogy a bejött objektum típusa azonos-e a "this" típusával, vagyis ClassA-val.
- A hozzászóláshoz be kell jelentkezni
Javaslok valamit. Az instanceof szopás elkerülésére inkább override-olj.
public void foo(ClassA o)
{
//dosomething
}
public void foo(ClassB o)
{
//dosomething
}
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Ezt vajon akkor is meg lehet tenni, ha a foo a ClaaBase osztály absztrakt függvénye?
- A hozzászóláshoz be kell jelentkezni
Akkor meg kötelező implementálni.
Mivel az absztrakt osztályban csak definiálva van a metódus.
Probléma mi?
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Hát igen.
De a próba sikeres volt. Működik ez az "instanceof" dolog.
Köszi mindenkinek!
- A hozzászóláshoz be kell jelentkezni
Nehéz ez a java beadandó :D
A PTI-s könnyebb.
Jótanács: nézz utána az öröklődés szabályainak.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni