Nem értem, egy polimorf metódushívást - verem túlcsordulás orosz

A java van 3 viselkedés kapcsolódik a téma:

  • felülírva (hivatalos dokumentációt itt)
  • túlterhelés (hivatalos dokumentáció itt - a „túlterhelés Módszerek”)
  • bujkál (hivatalos dokumentációt itt)

Amint azt a dokumentációt, amely:







Az elsődleges módszer ugyanaz a neve, száma és típusa paraméterek és visszatérési típusú, mint a módszer, hogy felülbírálja. Nyomós módszer is visszatérhet egy altípusa a típus által visszaadott felülírt módszerrel. Ez az altípus hívják kovariáns visszatérési típus.

és az Ön esetében már megsértett egy szabályt számú és típusú paramétereket. Kiderült, hogy nem írja felül. Ugyanakkor, tekintettel túl a következő van írva:

A Java programozási nyelv támogatja túlterhelés módszerek, valamint a Java tudja különböztetni módszerek különböző módszerrel aláírásokat. Ez azt jelenti, hogy a módszerek egy osztályon belül nem lehet azonos a neve, ha van más paraméter lista (van néhány képesítések ezen, hogy lesz szó a lecke „címmel interfészek és öröklés”).

Ez kifejezetten a helyzetét. Így a módszer okozza a kapcsolat pár p hívja a módszer osztály Pár. annak ellenére, hogy ez valójában egy tárgy részlete.

Ezen túlmenően, a java mechanizmust követni ilyen félreértések @Override jelölések, jelölési módszer rá a fordító hibát dobja, ha nem írja felül. Az Ön esetében:

A fordítóprogram hibát generál „módszer nem szünteti módszer annak mikrotörzs”.







Nos, a végén, hogy elérjék ezt az osztályban overrid'a Részletes módszert kell kinéznie:

Ebben az esetben, akkor kap a várt eredményt.

Remélhetőleg sikerült részletesen ismertesse az összes. Siker = további vizsgálat céljából).

Ahhoz, hogy megértsük, mi történik akkor tisztázni kell néhány fogalmat:

Perezruzka. Akkor lehet egy osztályban 2 módszer az azonos nevű, de különböző paraméterekkel.

Kényszerítő. Meg kell a teljes egybeesés típusú bemeneti paraméterek.

Örökséget. Ez biztosítja mezők és módszerek a szülő osztály

Ez nem az a meghatározás túlterhelheti fogalmak újraértelmezésére és öröklés, de csak néhány szempontból kapcsolódik a kérdés.

Az Ön esetében Részletes objektumnak két lehetőség GetObject módszer. az egyik, hogy kifejezetten meg közvetlenül az osztályban. public void GetObject (Date o). és a második kapta a szülő eredményeként öröklés. public void GetObject (Object o).

Amikor a VM van szüksége, hogy melyik módszer az úgynevezett, úgy néz ki, hogy milyen típusú beállítást akkor küldik a módszerrel, és milyen típusú ez a paraméter podhodischy vyriant túlterhelés.

Ezt a logikát követve, azt gondolhatnánk, hogy az eljárás egy dátum paraméter kell hívni. De te typecasting:

A listát a módszer az objektum mindig az határozza meg, hogy milyen típusú mutató. És mint egy mutató típusú, most pár, és ő csak egy változata a módszerrel, ő önként. És mivel az az objektum és dátum „nélkül lenyelhető összerezzent.” És ez okozza csak a pár GetObject (Object) módszer.

Válaszol augusztus 8-án 02:00

Ez még nem minden. Ha ebben a példában léptettek pár napja bemeneti paraméterként, vagy tegye Részletes Object jelzi a „Szöveg részlet”. helyett a „Szöveg Pair” mindezek ellenére ilyen típusú mutatók. Időpontot az érdeklődés hozott párosítása és Object részletesen - az eredmény az lesz, hogy a jármű, bár a logika befolyásolta, hogy a lenyelt tárgy dátuma - Alex Szymanski augusztus 8-án 06:15

@ Alex Szymanski nem, akkor félreértette a magyarázatom. Az a tény, hogy Object dátuma lenyelte azt jelenti, hogy nincsenek problémák a típusú átalakítás. De a logika azt jelzi, hogy a lista a módszer által meghatározott mutató típus, és abban az esetben, perezruzki szülő módszer is igaz. - Pavel augusztus 8-án 21:58