Tutorial OOP Java Part 9: Pengertian Method Overloading

Judul tutorial OOP Java kali ini memang sedikit mirip seperti method overriding, akan tetapi method overloading merupakan materi yang berbeda. Disini kita akan bahas dengan lebih detail apa itu method overloading dan perbedaannya dengan method overriding.


Pengertian Method Overloading

Di dalam bahasa Java, method overloading adalah membuat beberapa method dengan nama yang sama, tapi dibedakan dari jumlah dan/atau tipe parameter.

Seharusnya, kita tidak bisa membuat method dengan nama yang sama. Mirip seperti penamaan variabel, compiler Java akan error jika menemukan 2 atau lebih method dengan nama yang sama. Akan tetapi jika jumlah argument dan/atau tipe data argument berbeda, maka akan dianggap sebagai method yang berbeda pula.

Method overloading bisa saja terjadi dalam satu class yang sama, dan bisa juga dari class turunan.


Contoh Kode Program Method Overloading Java

Agar lebih mudah dipahami, kita akan bahas kasus method overloading dalam satu class yang sama:

class BelajarJava {
  
  static int tambah(int var1, int var2) {
    return var1 + var2;
  }
   
  static int tambah(int var1, int var2, int var3) {
    return var1 + var2 + var3;
  }
   
  static String tambah(String var1, String var2) {
    return var1 + " tambah " + var2;
  }

  public static void main(String args[]){
    System.out.println( tambah(1,2) );
    System.out.println( tambah(5,4,3) );
    System.out.println( tambah("satu","dua") );
  }
  
}

Hasil kode program:

Tutorial Belajar Java Pengertian Method Overloading

Dalam kode program ini saya membuat 3 buah method dengan nama tambah(). Ketiganya dibedakan berdasarkan jumlah parameter seperti method tambah() pertama dan kedua, serta jenis tipe data parameter yang berbeda seperti contoh method tambah() ketiga.

Pada saat di panggil, kita harus menulis method tambah() dengan jumlah dan tipe data argument yang sesuai.

Di baris 16 terdapat pemanggilan method tambah(1, 2). Perhatikan bahwa argumen pemanggilan method ini ada 2 dan keduanya bertipe integer. Maka akan cocok dengan definisi method tambah() di baris 3 – 5.

Di baris 17 terdapat pemanggilan method tambah(5, 4, 3). Kali ini argumen pemanggilan method tambah() ada 3 dan ketiganya bertipe integer. Maka ini akan cocok dengan definisi method tambah() di baris 7 – 9.

Terakhir di baris 18 terdapat pemanggilan method tambah("satu","dua"). Sekarang kedua argument bertipe string yang akan cocok dengan definisi method tambah() di baris 11 – 13.

Inilah maksud method overloading, dimana kita membuat beberapa method dengan nama yang sama.


Tidak Berlaku untuk Tipe Data Kembalian

Sebagai tambahan, tipe data nilai kembalian tidak termasuk ke dalam pembeda method overloading. Kode program berikut akan menghasilkan error:

class BelajarJava {
  
  static int tambah(int var1, int var2) {
    return var1 + var2;
  }
   
  static String tambah(int var1, int var2) {
    return "test...";
  }

  public static void main(String args[]){
    System.out.println( tambah(1,2) );
	  System.out.println( tambah(5,4) );
  }
  
}

Hasil kode program:

BelajarJava.java:7: 

error: method tambah(int,int) is already defined in class BelajarJava
static String tambah(int var1, int var2) {
                     ^
1 error

Kali ini saya membuat 2 buah method tambah() yang dibedakan hanya berdasarkan tipe data kembalian, yakni int di baris 3 dan string di baris 7.

Hasilnya akan error karena tipe data kembalian tidak menjadi faktor pembeda dari method overloading.


Method Overloading di Pewarisan Class

Efek overloading juga bisa terjadi antar class, berikut contoh prakteknya:

class Komputer {
  String cekInfo(int memory) { 
    return "Komputer dengan "+memory+" GB RAM"; 
  }
}

class Laptop extends Komputer {
  
  String cekInfo(String pemilik) { 
    return "Ini Laptop milik " + pemilik; 
  }
}

class BelajarJava {
  public static void main(String args[]){
    
    Laptop laptopAndi = new Laptop();
    System.out.println(laptopAndi.cekInfo(16));
    System.out.println(laptopAndi.cekInfo("Andi"));

  }
}

Hasil kode program:

Komputer dengan 16 GB RAM
Ini Laptop milik Andi

Di dalam class Komputer dan class Laptop sama-sama terdapat method cekInfo(), namun tipe parameter kedua method ini berbeda.

Maka ketika yang diakses adalah laptopAndi.cekInfo(16), itu akan menjalankan method cekInfo() di class Komputer, karena parameternya bertipe integer.

Sedangkan jika yang diakses laptopAndi.cekInfo("Andi"), itu akan menjalankan method cekInfo() di class Laptop, karena parameternya bertipe String.


Dalam tutorial ini kita telah mempelajari pengertian method overloading dalam bahasa Java. Lanjut, tutorial OOP Java berikutnya akan membahas tentang pengertian dan fungsi perintah super.

Add Comment