1. De ez még nem minden.
Tegyük fel, hogy az Cow
osztá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 .Whale
printName
Whale
Cow
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 Whale
néz ki az osztály az öröklődés és a metódus felülbírálása után:
|
Így Whale né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 Cow
vagy 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 Cow
változó egy objektumra való hivatkozást tárol Whale
, és printName()
az osztályban definiált metódust Whale
hí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