[Java lista] klasszikusnak számító kérdés
Zoltan Mozes
Zoltan_Mozes at epam.com
2006. Dec. 1., P, 10:55:04 CET
Bocsi - csak a helyes nyelvi használat miatt hadd igazítsak ki egy pici dolgot:
Azt írtad, ősosztály, mely absztrakt metódusait akarják a gyerekek felüldefiniálni. Ehelyett maradjunk annál hogy implementálni. (implement vs. override)
A kérdésre visszatérve: nem pontosan értem mi a kérdés, adsz még némi infót? (ha a többiek válaszoltak már akkor bocsi, off)
instanceof operátor nem egzakt típusazonosításra szolgál, mert számol az öröklődéssel is. (tehát true-t ad vissza néha akkor is - teljesen jól persze -, ha két konkrét típusában nem egyező de az öröklési fát tekintve egyezik. itt kapcsolódik a Polimorfizmus fogalma.)
Ehelyett a szakirodalom (ahogy én olvastam) konkrét (osztály-)típus összehasonlításra a Kuglibábu.class() == Nemtommilyenbábu.class() üsszehaszonlítást javasolja. Jó az == is, nem kell equals, mert minden typushoz tartozik egy (rejtett - na jó nem az, csak nem sűrűn használják és nem sűrűn kerül szóba) osztály, mely menedzseli az adott osztály konkrét példányait, így ha a 2 ojjektum azonos típusú (de konkrétan és nem örökölve) akkor nyilván ugyanarra az egy class-ojjektum menedzselő ojjektumot fogják megjelölni mint .class().
A többiek majd kijavítanak ha zavaros vagy pontatlan voltam.
"Reassuringly, instanceof and isInstance( ) produce exactly the same results, as do equals( ) and ==. But the tests themselves draw different conclusions. In keeping with the concept of type, instanceof says "are you this class, or a class derived from this class?" On the other hand, if you compare the actual Class objects using ==, there is no concern with inheritance-it's either the exact type or it isn't."
"instanceof vs. Class equivalence
When querying for type information, there's an important difference between either form of instanceof (that is, instanceof or isInstance( ), which produce equivalent results) and the direct comparison of the Class objects."
Bruce Eckel
Thinking in Java, 3rd ed. Revision 4.0
(free könyv - legális letölteni - én szeretem nem kicsit, nagyon)
Best Regards,
Zoltán Mózes
EPAM Systems
Budapest office, Hungary (GMT+1)
-----Original Message-----
From: javalist-bounces at javagrund.hu [mailto:javalist-bounces at javagrund.hu] On Behalf Of Fejér Ferenc Zsolt
Sent: Friday, December 01, 2006 3:06 AM
To: javalist at javagrund.hu
Subject: [Java lista] klasszikusnak számító kérdés
Tisztelt Lista!
Szinte biztosan nem először kérdezik ezt meg, azért remélem a
tapasztaltabbak sem fogják fejét venni a 100ezredik kérdezőnek.
Van egy ősosztály, abban egy absztrakt metódus. Ezt szeretné a sok
gyerekosztály felüldefiniálni, persze minden gyerekosztálybéli
metódusnak más ujjlenyomattal kéne rendelkeznie. Az "isInstanceOf"
históriát és az osztályba épített típusazonosítást természetesen nem
is fogjuk próbálni. Kérdésem az volna, hogy milyen megoldások
lehetségesek?
A válaszokat előre is köszönöm!
Fejér Ferenc
_______________________________________________
Javalist mailing list
Javalist at javagrund.hu
http://javagrund.hu/mailman/listinfo/javalist
További információk a(z) Javalist levelezőlistáról