"Halo, Amigo! Sawetara dina kepungkur aku ngandhani babagan cara overloading. Apa sampeyan ngerti kabeh?"

"Ya. Aku elinga. Saben metode kelas kudu unik. Metode anggota unik yen kelas ora duwe metode liyane kanthi jeneng lan jinis parameter sing padha (lan urutan parameter penting)."

"Apik banget! Aku weruh sampeyan wis sinau pawulangan sing apik. Dina iki aku pengin nggedhekake kawruh babagan topik iki mung dicokot. Apa cara sampeyan mikir bakal disebut ing saben kasus?"

Kode
class Cat
{
 public static void print(int n)
 {
  System.out.println(n);
 }
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }
 public static void print(String s)
 {
  System.out.println(s);
 }
public static void main(String[] args)
{
  Cat.print(1);
  Cat.print((byte)1);
  Cat.print("1");
  Cat.print(null);
 }
}

"Iku angel ngomong."

"Ing kasus sing sepisanan, 1 minangka int . Kita duwe 100% cocog karo cara sing njupuk int. Print void pisanan (int n). bakal disebut.

Ing kasus kapindho, kita ora duwe cara sing njupuk byte. Nanging ana rong cara sing njupuk singkat lan int. Adhedhasar aturan jinis widening, bait pisanan bakal widened kanggo cendhak, lan banjur widened kanggo int. Mangkono, putusan iku print void (cekak n). bakal diarani.

Ing kasus katelu, kita duwe 100% cocog karo cara sing njupuk String. Void print (String s). cara bakal disebut.

Kasus kaping papat iku ambigu. null ora duwe jinis tartamtu. Compiler bakal nolak kanggo ngumpulake kode iki . Ing kasus iki, kita kudu nulis Cat.print((Integer)null) kanggo nelpon cara katelu lan Cat.print((String)null) kanggo nelpon papat."

"Sing informatif banget. Matur nuwun."

"Aku pengin nggawa metu sing nalika nemtokake cara sing bener kanggo nelpon, jinis mung bisa widen. Padha ora bisa panah. Coba conto iki: "

Kode
class Cat
{
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }

 public static void main(String[] args)
 {
  Cat.print((byte)1);
  Cat.print(1);
 }
}

Ing kasus sing sepisanan, jinis bait bakal digedhekake dadi cendhak lan cara pisanan bakal diarani: void print(short n). .

Ing kasus kapindho, bakal ana konversi widening implisit saka int kanggo Integer, banjur cara liya bakal disebut: void print(Integer n). .

"Aku ora nyana."

"Ora, iki kejutan nyata:"

kode Jawa Katrangan
 class Cat
{
 public static void print(Object o)
 {
  System.out.println(o);
 }
 public static void print(String s)
 {
  System.out.println(s);
 }

 public static void main(String[] args)
 {
  Cat.print(1);
  Cat.print(null);
 }
}
Ing kasus sing sepisanan, int bakal ditambah dadi Integer. Amarga ora ana cara kanggo Integer, cara sing paling cocok (lan sing diarani) yaiku print void (Obyek o)

Ing kasus kapindho, ora bakal ana kesalahan kompilasi lan print void(String s) bakal diarani, sing rada ora jelas.

"Amigo, Muga-muga sampeyan ngerti yen ing kasus kaya mengkono iku paling apik kanggo nemtokake jinis operator cast (kaya ing kita nindakake karo «(bait)») supaya ngerti persis kang cara bakal disebut.

"Aku ora nyangka masalah bakal teka saka cara overloading. Nanging banjur sampeyan teka bebarengan. Thanks, Rishi. Aku bakal tetep munggah sandi ing titik iki."