Rabu, 21 Desember 2011

OVERRIDING DAN OVERLOADING

Setiap class meng extends class lain, class tersebut bisa meng overriding method yang ada di dalam class orang tuanya. Alasannya karena di class anak ingin mengimplementasikan method tersebut dengan cara yang berbeda. Misal dalam class MemberCustomer akan mengoverride method setId, untuk memeriksa apakan id yang dimasukkan null atau tidak, kalau null maka pesan akan di munculkan ke dalam console. Setelah pesan dicetak, method setId yang dipunyai oleh orang tua yang dipunyai oleh class Customer, hal ini bisa dilakukan dengan keyword super.

import java.io.Serializable;

public class MemberCustomer extends Customer implements Serializable{
            public void setId(Long aId){
                       if(aId ==  null){
                                  System.out.println("nilai id tidak boleh null");
                       }else {
                                 super.setId(aId);
                       }
            }
}

Overriding method dilakukan dengan cara mendeklarasikan method yang sama persis dengan method yang ada di class Orang Tuanya. Deklarasi method harus sama persis mulai dari access modifier, keyword yang digunakan, nama method, jumlah parameter, letak parameter, hingga deklarasi throws exception.

Apa yang terjadi jika mendeklarasikan sebuah variable dengan tipe Customer dan diinisiasi dengan object dari MemberCustomer, method setId milik siapa yang akan dieksekusi? Method yang dioverride akan terikat dengan instace dari variable bukan tipe dari variable, jadi yang akan dieksekusi adalah method dari MemberCustomer bukan dari Customer

public class OverridingTest{
          public static void main (String[] args){
                     Customer c = new Customer();
                     Customer mc = new MemberCustomer();
                     Long id = null;
                     // method yang dipanggil adalah yang dari class Customer karena c
                     // dideklarasikan dengan tipe Customer dan di inisiasi dengan class
                     // Customer
                     c.setId(id);

                     //method yang dipanggil adalah yang dari class MemberCustomer
                     // karena mc dideklarasi dengan tipe Customer dan diinisiasi dengan
                     // class MemberCustomer
                     mc.setId(id);

          }
}

Method overload merupakan feature dalam java dimana dua method dapat di deklarasikan dengan nama yang sama asalakan mempunyai argumen yang berbeda, baik dari jumlah tipe atau urutan parameternya

public void setId(Long aId){}
public void setId(Integer aId){}
public void setId(Long aId, boolean checkNull){}
public void setId(boolean checkNull, Long aId){}

Overriding dan Overloading juga berlaku pada constructor, karena pada dasarnya constructor adalah method.

Tidak ada komentar:

Posting Komentar