jump to navigation

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

 

  

 

 

public class MyClass {
      public String toString(){
            return “MyClass.toString()”;
      }
}

 

 

 

 

 

 

 

 

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: 

public class MyClass {
      public String ToString(){
            return “MyClass”;
      }
}

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:

class MyClass
{
    public override string ToString()
    {
        return “MyClass.ToString()”;
    }
}

 

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

Komentar»

1. Ardhio Wibowo Sutjipto - 5 Mei 2008

Duh kecewa aqu kk…..

Masa ga nyebutin sedikitpun tentang annotation….. >_>

2. Mirza Akhena - 5 Mei 2008

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…

3. firstyuyu - 5 Mei 2008

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

4. Rifai - 31 Oktober 2008

Boleh juga…..

5. geh - 24 April 2009

thengkyu,,artikelnya cukup membantu