1. Tetapi bukan itu sahaja.
Katakan Cow
kelas mempunyai printAll()
kaedah yang memanggil dua kaedah lain. Kemudian kod akan berfungsi seperti ini:
Kod | Penerangan |
---|---|
|
|
|
Output skrin akan menjadi:
|
Ambil perhatian bahawa apabila printAll()
kaedah dalam Cow
kelas dipanggil pada Whale
objek, printName
kaedah kelasWhale
digunakan, bukan kaedah dalam Cow
kaedah.
Perkara utama bukanlah kelas kaedah ditulis, tetapi jenis (kelas) objek yang kaedah dipanggil.
Hanya kaedah bukan statik boleh diwarisi dan ditindih. Kaedah statik tidak diwarisi dan oleh itu tidak boleh ditindih.
Inilah Whale
rupa kelas selepas menggunakan warisan dan kaedah mengatasi:
|
Begini Whale rupa kelas selepas menggunakan warisan dan kaedah mengatasi: Kami tidak tahu tentang sebarang printName kaedah lama. |
2. Typecasting
Terdapat perkara yang lebih menarik di sini. Oleh kerana kelas mewarisi semua kaedah dan data kelas induknya, rujukan kepada objek kelas anak boleh disimpan dalam (ditugaskan kepada) pembolehubah yang jenisnya sama dengan kelas induk (dan induk induk, dsb. — sehingga ke Object
kelas). Contoh:
Kod | Penerangan |
---|---|
|
Output skrin akan menjadi:
|
|
Output skrin akan menjadi:
|
|
Output skrin akan menjadi:
Kaedah ini toString() diwarisi daripada Object kelas |
Ini adalah harta yang sangat berharga: sedikit kemudian anda akan memahami cara menggunakannya dalam amalan.
3. Memanggil kaedah pada objek
Apabila kaedah dipanggil pada pembolehubah, kaedah itu sebenarnya dipanggil pada objek. Mekanisme ini dipanggil penghantaran kaedah dinamik.
Begini rupanya:
Kod | Penerangan |
---|---|
|
Output skrin akan menjadi:
|
|
Output skrin akan menjadi:
|
Ambil perhatian bahawa pelaksanaan khusus kaedah printName()
yang dipanggil — yang dalam Cow
atau yang dalam Whale
kelas — tidak ditentukan oleh jenis pembolehubah, tetapi oleh jenis objek yang dirujuk oleh pembolehubah itu.
Pembolehubah Cow
menyimpan rujukan kepada Whale
objek, dan printName()
kaedah yang ditakrifkan dalam Whale
kelas ialah apa yang dipanggil.
Ini tidak begitu jelas. Ingat peraturan utama:
Set kaedah yang tersedia untuk dipanggil pada pembolehubah ditentukan oleh jenis pembolehubah. Dan pelaksanaan kaedah khusus yang dipanggil ditentukan oleh jenis/kelas objek yang dirujuk oleh pembolehubah.
Anda akan menghadapi ini sepanjang masa, jadi lebih cepat anda mengingati ini, lebih baik.