Method Overriding di C# dan Java (Beserta Implikasinya) 5 Mei 2008
Posted by firstyuyu in Java vs C#.trackback
Di Java, jika kita mendefinisikan method di derived class yang nama dan signature-nya sama dengan yang ada di base class, maka otomatis akan terjadi method overriding. Misalnya seperti contoh berikut
Karena kelas MyClass tidak mendefinisikan base class-nya, maka secara implisit kelas MyClass merupakan turunan dari kelas Object. Karena kelas Object mempunyai method toString(), maka ketika kita definisikan method toString() di kelass MyClass, otomatis akan terjadi method overriding. Apa implikasi yang bisa terjadi di sini? Karena method overriding bisa terjadi secara otomatis, maka kita bisa saja secara tidak sengaja melakukan method overriding atau bahkan sebaliknya. Ketika kita ingin melakukan method overriding, karena kita salah mengetik, maka tidak akan terjadi method overriding. Perhatikan contoh berikut:
Pada method ToString, kita sebenarnya ingin melakukan method overriding tapi secara tidak sengaja, kita salah mengetik huruf “t” yang seharusnya kecil menjadi huruf “T” besar. Ketika kita compile, program ini tidak akan error. Bahkan ketika kita panggil method ToString (huruf “T” besar) juga tidak akan terjadi error. Program seolah-olah berjalan normal. Hanya kita saja mungkin yang nanti akan menjadi frustasi ketika mengetahui bahwa program kita tidak berjalan sesuai keinginan tapi tidak terdapat error message apapun. Kesalahan seperti ini sulit untuk dilacak dan sangat mungkin baru diketahui ketika program sudah di-release dan sampai di tangan customer.
Di C#, notasi untuk meng-override sebuah method dibuat eksplisit sehingga meminimalisasi kemungkinan kesalahan yang tidak disengaja. Di C#, jika kita ingin meng-override method dari base class, maka kita harus menambahkan keyword override di method tersebut. Perhatikan contoh berikut:
Pada contoh di atas, kita secara eksplisit menyatakan bahwa method ToString() di kelas MyClass meng-override method ToString() yang ada di kelas Object. Jika kita secara tidak sengaja salah mengetik ToString menjadi toString, maka compiler C# akan mengeluarkan pesan kesalahan “MyClass.toString()’: no suitable method found to override” yang tentu sesuai harapan kita.
Sekarang misalnya kita secara tidak sengaja mendeklarasikan sebuah method di derived class yang namanya sama dengan method yang ada di base class tanpa menambahkan keyword override, maka compiler C# akan mengeluarkan peringatan “‘MyClass.ToString()’ hides inherited member ‘object.ToString()’” yang menyatakan bahwa method ToString di kelas MyClass akan menyembunyikan method ToString dari kelas Object. Compiler juga akan memberikan saran kepada kita untuk menambahkan keyword override jika kita ingin mengoverride method ToString atau jika kita ingin menyembunyikan method ToString dari kelas Object, maka kita bisa menambahkan keyword new pada method kita tersebut.
Poinnya di sini adalah C# lebih eksplisit dalam pendefinisian method overriding. Hal ini memberikan dampak positif bagi developer dimana hal ini akan mengurangi kesalahan yang mungkin akan sulit dilacak.
Tools yang Digunakan:
Java: JDK 6 Update 6
C#: C# 3.0

Duh kecewa aqu kk…..
Masa ga nyebutin sedikitpun tentang annotation….. >_>
wew…
Kita kan Manusia, sering berbuat kesalahan dan sangat erat dengan yang namanya lupa…
so, C# ud ngasi mekanisme utk mereduce kesalahan kita dalam melakukan overriding ya…
bagoeslah
but C# mesti say thanks to Java. Dia kan belajar banyak juga dari java…
iya, kelewat gak disebutin
Tapi poinnya adalah bahwa di C# by default compiler akan menjaga kita dari kesalahan tulis dalam overriding method. Sementara java masih menuntut kedisiplinan developer untuk menambahkan annotation @override yang mana jika kita lupa tidak menambahkan annotation tersebut, compiler java tidak akan menampilkan warning atau error message
Boleh juga…..
thengkyu,,artikelnya cukup membantu