Method Overloading, Türkçe karşılığında pek bir anlam ifade etmese de “Metodu Aşırı Yükleme” olarak tercüme edilebilir. Peki, nedir bu Method Overloading?

Method Overloading, aynı isimde birden fazla metodun yazılabilmesidir. Tabii, burada şu soru aklınıza gelecektir; eğer birden fazla aynı isimde metot mevcutsa derleyicimiz hata vermeyecek mi? Burada bu aynı isimdeki metotları birbirinden farklı kılan aldıkları parametreler ve parametrelerin türleridir. 

Örneğin,

fun main(args: Array<String>)
{
   userInformation("Barış", "Uslucan")
}

fun userInformation (name:String, surname:String)
{
 println("$name $surname")
}


Burada “name” ve “surname” parametreli userInformation metodunu çağırdığımızda , uygulamamız “Barış USLUCAN” olarak ekrana yansıtacaktır. Şimdi, ad soyad ile  birlikte bunun yanında zorunlu olmamakla birlikte id bilgisi de eklemek isteyelim.

fun main(args: Array<String>)
{
   userInformation("Barış", "Uslucan",51)
}

fun userInformation (name:String, surname:String)
{
 println("$name $surname")
}

fun userInformation (name:String, surname:String, id:Int)
{
 println("$name $surname $id")
}


Bu durumda userInformation metodunu çağırıp  parametreleri gönderdiğimizde hangi metot çağırılacak? Tabii ki de, üç tane parametre  gönderdiğimizden, üç parametreli metodumuz çalışacaktır. Burada, aynı isimde  farklı  sayıda parametreler döndüren metotlar yazdık, işte bu olaya “Method Overloading” diyoruz.

fun main(args: Array<String>)
{
   userInformation("Fikret", "Işık")
   userInformation("Barış", "Uslucan",  34)
   userInformation("Veli", "Kaymak", 21, "12345678")
}

fun userInformation(name:String, surname:String)
{
 println("$name $surname")
}

fun userInformation(name:String, surname:String, id:Int)
{
 println("$name $surname $id")
}

fun userInformation(name:String, surname:String, id:Int, tel:String)
{
 println(println("$name $surname $id $tel"))
}


Şimdi burada kodumuzu inceleyelim,  ilk metodumuz iki parametre aldığından iki parametreli metodumuz, ikincisi üç parametre aldığından üç parametreli metodumuz, üçüncüsü dört parametre aldığından dört parametreli metodumuz çağırılacaktır. Sonuç olarak uygulama;

Fikret Işık
Barış Uslucan 34
Veli Kaymak 21 12345678

çıktısını verecektir.

Ayrıca burada dikkat edilmesi gerekilen husus veri tipine göre method overloading işlemi GERÇEKLEŞTİRİLEMEZ. Bunun sebebi derleyicinin hangi tipte metodu çağırmak istediğinizi belirleyememesidir.

fun main(args: Array<String>)
{
  println(calculate(3,5)) // Error!!!!
}

fun calculate(num1 : Int, num2: Int) : Int
{
  return num1+num2
}

fun calculate(num1: Int, num2: Int) : Double
{
  return num1+num2
}


Burada da dikkat edilirse iki tane parametreleri aynı farklı türde geri değer döndüren metotlarımız mevcut. Burada parametreler aynı olduğundan metodu çağırdığımızda derleyici hangi metodu çağıracağını bilemez, bu sebeple aynı parametreli metotlar geri değer döndürecekse farklı veri tiplerine göre method overloading yapılamaz.