jump to navigation

Notasi Pemanggilan Konstruktor Berantai di Java dan C# 9 Mei 2008

Posted by firstyuyu in Java vs C#.
trackback

Di Java, jika kita ingin melakukan pemanggilan konstruktor dari dalam sebuah konstruktor (pemanggilan berantai), kita bisa melakukannya dengan menggunakan method khusus yaitu this dan super. Method this digunakan untuk memanggil konstruktor yang berada di kelas yang sama. Sementara method super digunakan untuk memanggil konstruktor yang berada di base class.

Misalnya kita mempunyai base class sebagai berikut:

class Base {

      public Base(int p){

            //…

      }

}

 

 

 

Lalu kita buat sebuah kelas yang merupakan turunan dari kelas Base sebagai berikut:

class Derived extends Base{

      public Derived(int p1, String p2) {

            super(p1);

            //…

      }    

 

      public Derived(int p1, String p2, String p3) {

            this(p1, p2);

            //…

      }    

}

 
 
 

 

Kelas Derived mempunyai dua buah konstruktor. Yang pertama meminta dua parameter berupa int dan String sementara yang kedua meminta tiga parameter berupa int, String, dan String. Konstrutor yang pertama menuntukkan bagaimana notasi pemanggilan konstruktor yang berada di base class dengan menggunakan method khusus, yaitu super. Sementara konstruktor yang kedua menunjukkan bagaimana notasi pemanggilan konstruktor yang berada di kelas yang sama dengan menggunakan method khusus, yaitu this.

Sementara itu di C#, notasi pemanggilan konstruktor berantai mengadopsi dari bahasa C++. Kelas Derived di atas jika ditulis dalam C# akan menjadi seperti berikut:

 

class Derived : Base{

      public Derived(int p1, String p2) : base(p1) {

            //…

      }    

 

      public Derived(int p1, String p2, String p3) : this(p1, p2) {

            //…

      }    

}

 

Di C#, untuk memanggil konstruktor yang berada di base class, digunakan kata kunci base bukan super sepert tampak pada kode program di atas.

Satu hal yang harus diingat pada pemanggilan konstruktor berantai adalah bahwa pemanggilan konstruktor harus berada di baris pertama. Hal ini penting karena untuk menjamin bahwa semua data telah terinisialisasi.

Saya pribadi lebih menyukai sintaks yang ditawarkan oleh C# karena sintaks tersebut akan selalu membuat pemanggilan konstruktor berada di baris paling awal. Sementara di java, karena bentuk pemanggilan konstruktor berantainya seperti method biasa, maka kita bisa saja salah tulis dan menempatkan pemanggilan method super atau this bukan di baris paling awal. Compiler java sebenarnya telah memperhitungkan kemungkinan ini dan akan mengeluarkan pesan kesalahan jika kita menempatkan pemanggilan konstruktor berantai bukan di baris paling awal, seperti contoh berikut

      public Derived(int p1, String p2) {

            //error: constructor call must

            // be the first statement in

            // a constructor

            int i = 0;

            super(p1);

      }    

 

Namun yang menjadi poin di sini adalah bahwa saya lebih menyukai sintaks yang ditawarkan C# karena ia akan selalu memaksa kita untuk menuliskan pemanggilan konstruktor berantai pada baris paling awal sehingga mencegah kita dari kesalahan penulisan seperti kode di atas.

Komentar»

1. geh - 24 April 2009

wahh..ternyata banyak hal pada c# yg tidak saya ketahui.. hehe

2. firstyuyu - 24 April 2009

Sama mbak Gina, saya juga masih harus banyak belajar 🙂


Tinggalkan komentar