[ HTML ] [ Java ] [ Bahasa C ]


Jumat, April 19, 2019

Method Overloading pada Java

Overloading memungkinkan berbagai method yang berbeda untuk memiliki nama yang sama, tetapi dengan signature yang berbeda. Signature dapat berbeda oleh angka dari input parameter atau tipe dari input parameter atapun juga keduanya. Overloading berkaitan dengan compile time (atau static) polymorphism.

// Program Java

// mendemonstrasikan kerja

// dari method overloading

// pada Java.

public class Sum

 

// melakukan overloading sum()

// yang mengambil dua

// parameter int.

public int sum(int x, int y

{return (x + y);} 

 

// melakukan overloading sum()

// yang mengambil tiga

// parameter int.

public int sum(int x, int y, int z

{return (x + y + z);} 

 

// melakukan overloading sum()

// yang mengambil dua

// parameter double.

public double sum(double x, double y

{return (x + y);} 

 

/* Driver code */

public static void main(String args[]

Sum s = new Sum(); 

System.out.println(s.sum(10, 20)); 

System.out.println(s.sum(10, 20, 30)); 

System.out.println(s.sum(10.5, 20.5)); 

}

 

}

Output:
30
60
31.0

Pertanyaan:
Bagaimana jika prototipe tertentu tidak cocok dengan argumen.
Jawab:
Secara prioritas, compiler akan mengambil langkah-langkah berikut ini:
satu, Ketik Conversion tetapi dengan tipe yang lebih tinggi (dalam hal rentang) pada 'family' yang sama.
dua, Ketik Conversion ke 'family' yang lebih tinggi selanjutnya (seharusnya jika tidak terdapat tipe data long yang tersedia untuk tipe data int, maka yang akan dicari adalah tipe data float).
Berikut adalah contoh dari penerapan konsep tersebut:

class Demo 

public void show(int x

{System.out.println("In int" 

+x);} 

 

public void show(String s

{System.out.println("In"

+" String" 

+s);}

 

public void show(byte b

{System.out.println("In"

+" byte"

+b);}

}

 

class UseDemo 

{

public static void main(String[] args

{byte a = 25

Demo obj = new Demo();

 

// akan menuju ke argumen byte 

obj.show(a); 

 

// String

obj.show("hello");

 

// Int  

obj.show(250); 

 

// Ketika tipe data char tidak

// tersedia, maka tipe data

// yang lebih tinggi dari char

// dalam hal rentang adalah

// int.

obj.show('A');

 

// String 

obj.show("A"); 

 

// Ketika tipe data float

// tidak tersedia dan juga

// bukan merupakan tipe data

// yang lebih tinggi, maka

// pada tahap ini akan terjadi

// error.

obj.show(7.5);}

}


Apa keuntungan dari overloading?
Keuntungannya adalah tidak perlu menciptakan dan mengingat nama-nama fungsi yang berbeda untuk melakukan tugas yang sama. Contohnya, pada program berikut ini jika overloading tidak didukung oleh Java, maka harus diciptakan method dengan nama sum1, sum2, ..., dan seterusnya.

Dapatkah dilakukan overloading method pada tipe return?
Jawab: tidak bisa dilakukan overloading oleh tipe return. Behavior ini juga sama pada C++, berikut contoh program untuk rincian lebih lengkap.

public class Main 

 

public int foo() { return 10; } 

 

// compiler error: foo() sudah

// didefinisikan.

public char foo() { return 'a'; } 

 

public static void main(String args[]){}

 

}


Namun, overloading method pada tipe return mungkin dapat dilakukan pada kasus dimana tipe data dari fungsi akan dipanggil spesifik dan eksplisit. Perhatikan contoh program berikut ini:

// Program Java untuk

// mendemonstrasikan kerja

// dari method overloading

// pada static method.

public class Main

 

public static int foo(int a) { return 10; } 

 

public static char foo(int a, int b) { return 'a'; } 

 

public static void main(String args[]

System.out.println(foo(1)); 

System.out.println(foo(1, 2)); 

}

 

}

Output:
10
a

// Program Java

// mendemonstrasikan kerja

// dari method overloading

// dalam sebuah method.

class

public int foo(int a)

{return 10;} 

 

public char foo(int a, int b

{return 'a';} 

 

public class Main 

public static void main(String args[]

{A a = new A(); 

System.out.println(a.foo(1)); 

System.out.println(a.foo(1, 2));}

}

Output:
10
a

Dapatkah dilakukan overloading pada method static?
Jawabannya adalah iya. Method static dapat memiliki lebih dari satu static method dengan nama yang sama, tetapi berbeda pada input parameternya.

Dapatkah dilakukan overloading method yang berbeda hanya pada bagian keyword static?
Tidak dapat dilakukan overloading dua method pada Java jika berbeda hanya pada keyword static-nya (angka dari parameter dan tipe dari parameter adalah sama).

Dapatkah dilakukan overloading main() pada Java?
Seperti halnya static method lainnya, main() dapat dilakukan overloading pada Java. Berikut adalah contoh programnya.

// Sebuah program Java dengan

// overloading main().

import java.io.*

 

public class Test 

 

/* Normal main() */

public static void main(String[] args

{System.out.println("Hi "

+"Peek (from main)"); 

Test.main("Peek");} 

 

/* Overloading main method */

public static void main(String arg1

{System.out.println("Hi, " 

+ arg1); 

Test.main("Dear Kon"

"My Flen");} 

 

public static void main(String arg1, String arg2

{System.out.println("Hi, " 

+arg1 

+", "

+arg2);}

 

}

Output:
Hi Peek (from main)
Hi, Peek
Hi, Dear Kon, My Flen

Apakah Java mendukung operator overloading?
Tidak seperti C++, Java tidak mengijinkan user-defined overloading operator. Secara internal Java melakukan overloading operator.

Apakah perbedaan antara overloading dan overriding?
satu, Overloading adalah tentang fungsi yang sama tetapi memiliki signature yang berbeda. Overriding adalah tentang fungsi yang sama, signature yang sama, tetapi class yang terhubung melalui inheritance berbeda seperti diperlihatkan pada gambar 1.

penggunaan overloading dan overriding pada bahasa pemrograman Java
Gambar 1 overloading dan overriding
sumber : geeksforgeeks.org

dua, Overloading adalah contoh dari compiler time polymorphism dan overriding adalah contoh dari runtime polymorphism.

Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D