Thursday, May 26, 2011

Bahaya Overidable Method di Konstruktor

Lagi coding Java, nemu error Overridable method call in constructor. Jadi keinget dulu di c++ pernah ngalamin hal yang sama, semua OOP kyknya begitu deh, jadi pengen jelasin lebih detil.

Apa itu Overridable Method di Konstruktor?
Overridable Method adalah method pada suatu kelas yang dapat di override pada kelas turunannya. Umumnya hampir method public dapat di override.

Kenapa Overridable Method di Konstruktor berbahaya?
Katakan ada kelas A, yang pada konstruktornya memanggil method EchoClass(), isinya ngeprint A.
Kemudian ada kelas B, turunan kelas A, yang meng-override EchoClass(), yang isinya ngeprint B.
Katakan konstruktor B isinya kosong, dengan kondisi demikian, ketika kita meng-instansiasi kelas B, EchoClass yang ngeprint B tidak akan pernah muncul, yang muncul hanyalah ngeprint A.

err, berbahayanya dimana ya?
sebenernya ga bahaya sih kalo contoh diatas. Tapi pada umumnya, kenapa sampai EchoClass di override, itu pasti terdapat suatu maksud. Jika seorang perancang memang bermaksud menggunakan EchoClass dari Kelas Bapaknya, tentunya tidak akan repot-repot meng-override EchoClass. Ketika yang diharapkan dari menginstansiasi kelas B adalah memanggil EchoClass() yang ngeprint B, disinilah bahayanya muncul.
Coba kita ganti nama kelasnya, A menjadi OSHandler, B menjadi LinuxHandler, dan EchoClass menjadi InitializeClass(). Bisa saja seorang beranggapan ketika menginstansiasi LinuxHandler, berharap LinuxHandler.InitializeClass() yang dipanggil, padahal kenyataannya tidak demikian.

Wajar bahaya, orang ribet gitu kelas-kelasnya, coba bikin simpel pasti ga bahaya deh
yah, kalo bisa mengindari situasi kayak diatas, tentu bagus sekali.

Anggep emang kayak diatas deh kasusnya, solusinya gimana?
sederhananya, membuat Overridable Method menjadi Un-Overridable Method. Ini jalan pintasnya, meski terkadang tidak bisa semudah itu. Caranya paling mudah adalah dengan mem-private-kan method tersebut.

Tapi ya, ga pernah tuh gw ngalamin kasus gitu
Good for you then. unfortunately for me, gw malah udah 2 kali ngalamin.

Ada yang kurang jelas atau ingin tanya lebih dalam? tulis aja di comment ya, akan Saya jawab sebelum nambah post pastinya, thkyu.

No comments:

Post a Comment