1. De ez még nem minden.
Tegyük fel, hogy az Cowosztálynak van egy printAll()metódusa, amely két másik metódust is meghív. Ezután a kód így fog működni:
| Kód | Leírás |
|---|---|
|
|
|
A képernyő kimenete a következő lesz:
|
Vegye figyelembe, hogy amikor az osztály printAll()metódusát egyCow objektumon hívják meg , akkor az osztály metódusa kerül felhasználásra, nem a metódusban lévő metódus .WhaleprintNameWhaleCow
A lényeg nem az osztály, amelybe a metódus van írva, hanem az objektum típusa (osztálya), amelyen a metódus meghívásra kerül.
Csak a nem statikus módszerek örökölhetők és felülírhatók. A statikus módszerek nem öröklődnek, ezért nem írhatók felül.
Így Whalenéz ki az osztály az öröklődés és a metódus felülbírálása után:
|
Így Whalenéz ki az osztály az öröklődés és a metódus felülbírálása után: Nem tudunk régi metódusról printName. |
2. Típusírás
Van itt egy még érdekesebb pont. Mivel egy osztály örökli szülőosztályának összes metódusát és adatát, a gyermekosztály objektumára való hivatkozás olyan változókban tárolható (hozzárendelt), amelyek típusa megegyezik a szülőosztályéval (és a szülő szülőjével stb. ) egészen az osztályig Object). Példa:
| Kód | Leírás |
|---|---|
|
A képernyő kimenete a következő lesz: |
|
A képernyő kimenete a következő lesz: |
|
A képernyő kimenete a következő lesz:A metódus az osztályból toString()öröklődikObject |
Ez egy nagyon értékes tulajdonság: egy kicsit később meg fogja érteni, hogyan kell használni a gyakorlatban.
3. Metódus hívása egy objektumon
Ha egy metódust egy változón hívjuk meg, akkor a metódus valójában egy objektumra kerül meghívásra. Ezt a mechanizmust dinamikus módszer-küldésnek nevezik.
Így néz ki:
| Kód | Leírás |
|---|---|
|
A képernyő kimenete a következő lesz: |
|
A képernyő kimenete a következő lesz: |
Vegye figyelembe, hogy a printName()meghívott metódus konkrét megvalósítását – az osztályban lévőt Cowvagy az osztályban lévőt Whale– nem a változó típusa határozza meg, hanem az objektum típusa, amelyre a változó hivatkozik.
A Cowváltozó egy objektumra való hivatkozást tárol Whale, és printName()az osztályban definiált metódust Whalehívják.
Ez nem túl nyilvánvaló. Ne feledje a fő szabályt:
A változóban meghívható metódusok halmazát a változó típusa határozza meg. A meghívandó konkrét metódusmegvalósítást pedig a változó által hivatkozott objektum típusa/osztálya határozza meg.
Mindig találkozni fogsz ezzel, tehát minél előbb eszedbe jut, annál jobb.
GO TO FULL VERSION