1. Ngunit hindi lang iyon.
Ipagpalagay na ang Cow
klase ay may isang printAll()
pamamaraan na tumatawag sa dalawang iba pang mga pamamaraan. Pagkatapos ang code ay gagana tulad nito:
Code | Paglalarawan |
---|---|
|
|
|
Ang output ng screen ay magiging:
|
Tandaan na kapag ang printAll()
pamamaraan sa Cow
klase ay tinawag sa isang Whale
bagay, ang printName
paraan ngWhale
klase ang ginagamit, hindi ang nasa Cow
pamamaraan.
Ang pangunahing bagay ay hindi ang klase kung saan nakasulat ang pamamaraan, ngunit ang uri (klase) ng bagay kung saan tinawag ang pamamaraan.
Ang mga non-static na pamamaraan lamang ang maaaring mamana at ma-override. Ang mga static na pamamaraan ay hindi minana at samakatuwid ay hindi maaaring i-override.
Narito kung ano ang Whale
hitsura ng klase pagkatapos mag-apply ng inheritance at method overriding:
|
Narito ang Whale hitsura ng klase pagkatapos mag-apply ng inheritance at method overriding: Wala kaming alam tungkol sa anumang lumang printName paraan. |
2. Typecasting
Mayroong isang mas kawili-wiling punto dito. Dahil minana ng isang klase ang lahat ng pamamaraan at data ng parent class nito, ang isang reference sa isang object ng child class ay maaaring maimbak sa (nakatalaga sa) mga variable na ang uri ay kapareho ng parent class (at ang magulang ng magulang, atbp. — hanggang sa Object
klase). Halimbawa:
Code | Paglalarawan |
---|---|
|
Ang output ng screen ay magiging:
|
|
Ang output ng screen ay magiging:
|
|
Ang output ng screen ay magiging:
Ang toString() pamamaraan ay minana mula sa Object klase |
Ito ay isang napakahalagang pag-aari: ilang sandali ay mauunawaan mo kung paano ito gamitin sa pagsasanay.
3. Pagtawag ng paraan sa isang bagay
Kapag ang isang pamamaraan ay tinawag sa isang variable, ang pamamaraan ay aktwal na tinatawag sa isang bagay. Ang mekanismong ito ay tinatawag na dynamic method dispatch.
Narito ang hitsura nito:
Code | Paglalarawan |
---|---|
|
Ang output ng screen ay magiging:
|
|
Ang output ng screen ay magiging:
|
Tandaan na ang partikular na pagpapatupad ng printName()
paraan na tatawagin — ang nasa Cow
o ang nasa Whale
klase — ay hindi tinutukoy ng uri ng variable, ngunit sa uri ng bagay na tinutukoy ng variable.
Ang Cow
variable ay nag-iimbak ng isang sanggunian sa isang Whale
bagay, at ang printName()
pamamaraan na tinukoy sa Whale
klase ay kung ano ang tinatawag.
Hindi ito masyadong halata. Tandaan ang pangunahing panuntunan:
Ang hanay ng mga pamamaraan na magagamit upang tawagan sa isang variable ay tinutukoy ng uri ng variable. At ang tiyak na pagpapatupad ng pamamaraan na matatawag ay tinutukoy ng uri/klase ng bagay na tinutukoy ng variable.
Makikita mo ito sa lahat ng oras, kaya kapag mas maaga mong naaalala ito, mas mabuti.
GO TO FULL VERSION