"Amigo, apa sampeyan seneng paus?"
"Paus? Ora, ora tau krungu bab mau."
"Iku kaya sapi, mung luwih gedhe lan nglangi. Kebetulan, paus asale saka sapi. Eh, utawa paling padha duwe leluhur sing padha. Ora masalah."

"Ngrungokake. Aku pengin ngomong babagan alat OOP liyane sing kuat banget: polimorfisme . Wis papat fitur."
1) Metode overriding.
Mbayangno yen sampeyan wis nulis kelas "Sapi" kanggo game. Wis akeh variabel anggota lan metode. Objek saka kelas iki bisa nindakake macem-macem perkara: mlaku, mangan, turu. Sapi uga muni lonceng nalika mlaku. Contone, sampeyan wis ngetrapake kabeh ing kelas nganti detail sing paling cilik.

Banjur dumadakan customer ngandika arep nerbitaké tingkat anyar game, ngendi kabeh tumindak njupuk Panggonan ing segara, lan karakter utama paus.
Sampeyan miwiti kanggo ngrancang kelas Paus lan éling sing iku mung rada beda saka kelas Cow. Kaloro kelas kasebut nggunakake logika sing padha, lan sampeyan mutusake nggunakake warisan.
Kelas Sapi saenipun cocog kanggo dadi kelas induk: wis duwe kabeh variabel lan metode sing dibutuhake. Sampeyan mung kudu nambah kemampuan paus kanggo nglangi. Nanging ana masalah: paus sampeyan duwe sikil, sungu, lan lonceng. Sawise kabeh, kelas Cow ngetrapake fungsi kasebut. Apa sing kowe iso?

Cara overriding teka kanggo ngluwari. Yen kita marisi cara sing ora nindakake persis apa sing kita perlu ing kelas anyar kita, kita bisa ngganti cara karo liyane.

Kepiye carane iki rampung? Ing kelas turunan kita, kita ngumumake metode sing pengin diganti (kanthi tandha cara sing padha karo kelas induk) . Banjur kita nulis kode anyar kanggo metode kasebut. Mekaten. Kaya-kaya metode tuwa kelas induk ora ana.
Mangkene cara kerjane:
Kode | Katrangan |
---|---|
|
Kene kita nemtokake rong kelas: Cow lan Whale . Whale pusaka Cow .
Kelas kasebut |
|
Kode iki nampilake " Aku sapi " ing layar. |
|
Kode iki nampilake " Aku paus " ing layar |
Sawise menehi warisan Cow
lan nimpa printName
, Whale
kelas kasebut duwe data lan metode ing ngisor iki:
Kode | Katrangan |
---|---|
|
Kita ora ngerti apa-apa babagan cara lawas. |
"Jujur, iku sing dakkarepake."
2) Nanging ora kabeh.
"Saumpama Cow
kelas kasebut duwe printAll
metode , sing nyebutake rong metode liyane. Banjur kode kasebut bakal kaya mangkene:"
Layar bakal nuduhake:
Aku putih
aku paus
Kode | Katrangan |
---|---|
|
|
|
Layar bakal nuduhake: Aku putih aku paus |
Elinga yen metode printAll () kelas Cow diarani obyek Whale, metode printName () Whale bakal digunakake, dudu Cow.
Sing penting dudu kelas sing ditulis metode, nanging ketik (kelas) obyek sing diarani metode kasebut.
"Aku weruh."
"Sampeyan mung bisa marisi lan ngatasi cara non-statis. Cara statis ora diwarisake lan mulane ora bisa ditindhes."
Mangkene tampilan kelas Whale sawise ngetrapake warisan lan ngilangi metode kasebut:
Kode | Katrangan |
---|---|
|
Mangkene apa sing katon ing kelas Whale sawise ngetrapake warisan lan ngilangi metode kasebut. Kita ora ngerti apa-apa babagan cara lawas printName . |
3) Tipe casting.
Punika titik sing luwih menarik. Amarga kelas marisi kabeh cara lan data saka kelas induk, obyek saka kelas iki bisa dirujuk dening variabel kelas induk (lan induk induk, dsb., nganti kelas Obyek). Coba conto iki:
Kode | Katrangan |
---|---|
|
Layar bakal nuduhake: Aku putih. |
|
Layar bakal nuduhake: Aku putih. |
|
Layar bakal nuduhake: Whale@da435a. Metode toString() diwarisake saka kelas Obyek. |
"Barang apik. Nanging kenapa sampeyan butuh iki?"
"Iku fitur terkenal. Sampeyan bakal ngerti mengko yen iku banget, banget terkenal."
4) Late binding (pengiriman dinamis).
Mangkene apa sing katon:
Kode | Katrangan |
---|---|
|
Layar bakal nuduhake: Aku paus. |
|
Layar bakal nuduhake: Aku paus. |
Elinga yen dudu jinis variabel sing nemtokake cara printName tartamtu sing kita sebut (saka kelas Cow utawa Whale), nanging jinis obyek sing dirujuk dening variabel kasebut.
Variabel Cow nyimpen referensi kanggo obyek Whale , lan cara printName ditetepake ing kelas Whale bakal disebut.
"Inggih, padha ora nambah sing kanggo kajelasan."
"Ya, ora ketok. Elinga aturan penting iki:"
Sakumpulan metode sing sampeyan bisa nelpon ing variabel ditemtokake dening jinis variabel. Nanging metode / implementasi tartamtu sing diarani ditemtokake dening jinis / kelas obyek sing dirujuk dening variabel.
"Aku bakal nyoba."
"Sampeyan bakal ngalami iki terus-terusan, supaya sampeyan bakal cepet ngerti lan ora bakal lali."
5) Tipe casting.
Casting dianggo beda kanggo jinis referensi, IE kelas, saka apa kanggo jinis primitif. Nanging, konversi widening lan narrowing uga ditrapake kanggo jinis referensi. Coba conto iki:
Widening konversi | Katrangan |
---|---|
|
Konversi widening klasik. Saiki sampeyan mung bisa nelpon cara ditetepake ing kelas Cow ing obyek Whale. Compiler bakal ngidini sampeyan nggunakake variabel cow mung kanggo nelpon cara sing ditetepake dening jinis Cow. |
Narrowing konversi | Katrangan |
---|---|
|
Konversi penyempitan klasik kanthi mriksa jinis. Variabel sapi saka jinis Cow nyimpen referensi kanggo obyek Whale. Kita priksa manawa iki kedadeyan , banjur nindakake konversi jinis (widening). Iki uga disebut casting jinis . |
|
Sampeyan uga bisa nindakake konversi narrowing saka jinis referensi tanpa jinis-mriksa obyek. Ing kasus iki, yen variabel cow pointing ing soko liyane saka obyek Whale, pangecualian (InvalidClassCastException) bakal di buwang. |
6) Lan saiki kanggo soko sedhep. Nelpon cara asli.
Kadhangkala nalika ngganti metode sing diwarisake, sampeyan ora pengin ngganti kabeh. Kadhangkala sampeyan mung pengin nambah sethithik.
Ing kasus iki, sampeyan pengin kode cara anyar nelpon cara sing padha, nanging ing kelas dhasar. Lan Jawa ayo padha nindakake iki. Iki carane iku rampung: super.method()
.
Ing ngisor iki sawetara conto:
Kode | Katrangan |
---|---|
|
|
|
Layar bakal nuduhake: Aku putih Iki palsu: Aku sapi aku paus |
"Hmm. Lha kuwi mau pelajaran. Kuping robotku meh leleh."
"Ya, iki dudu barang sing prasaja. Iki minangka salah sawijining materi sing paling angel sing bakal sampeyan temoni. Profesor janji bakal menehi link menyang materi saka penulis liyane, supaya yen sampeyan isih ora ngerti, sampeyan bisa ngisi jurang."
GO TO FULL VERSION