Overlading Nedir? Nasıl Yapılır? | Java

Share

Java’da metotlar ve polymorphism denince akla gelen ilk kavramlardan bir tanesi Overloading’tir. Bu yazıda, Java’da Overloading nedir, nasıl yapılır ve faydaları nelerdir gibi pek çok soruya yanıt vereceğiz.

Overloading Nedir?

Overloading, Java’da bir class’a aynı isme sahip birden fazla metodun eklenmesine izin veren bir özelliktir. Bir metodu overloading yapabilmek, yani aynı isimde birden fazla metot oluşturabilmek için method signature’ın (metot imzası) yani metot parametrelerinin birbirinden farklı olması gerekir. Method signature üç farklı şekilde değiştirilebilir;

  1. Parametre Sayısını Değiştirme
  2. Parametrelerin Veri Türünü Değiştirme
  3. Parametrelerin Yerlerini Değiştirme

Overloding Nasıl Yapılır?

Yukarıda da ifade ettiğimiz üzere Overloading üç farklı şekilde yapılabilir.

1. Parametre Sayısını Değiştirerek Overloading Yapma

Aşağıdaki örnekte görebileceğiniz üzere, aynı isme sahip iki metot var. Fakat iki metodun parametre sayıları birbirinden farklı. İlk metod 2 int değeri alırken, ikinci metot 3 int metodu alıyor. Parametre sayılarını değiştirerek buna benzer şekilde daha fazla sayıda overloading işlemi gerçekleştirmemiz mümkün.

    public static int topla(int x, int y) {
        return x + y;
    }

    public static int topla(int x, int y, int z) {
        return x + y + z;
    }

    public static void main(String[] args) {
        int myNum1 = topla(8, 5);
        int myNum2 = topla(4, 6, 12);
        System.out.println("myNum1 = " + myNum1); // 13
        System.out.println("myNum2 = " + myNum2); // 22
    }

2. Parametrelerin Veri Türünü Değiştirerek Overloading Yapma

Yukarıdakine benzer şekilde parametre sayısı yerine onların veri türlerini değiştirerek de Overloading yapmak mümkün.

    static int topla(int x, int y) {
        return x + y;
    }

    static double topla(double x, double y) {
        return x + y;
    }

    public static void main(String[] args) {
        int myNum1 = topla(8, 5);
        double myNum2 = topla(4.3, 6.26);
        System.out.println("int: " + myNum1);
        System.out.println("double: " + myNum2);
    }

3. Parametrelerini Yerlerini Değiştirerek Overloading Yapma

Yukarıdaki iki yöntemin dışında farklı parametrelere sahip bir metodun parametrelerinin yerlerini değiştirerek de Overloading yapmak mümkün.

    static int topla(int x, double y) {
        return (int) (x + y);
    }

    static double topla(double x, int y) {
        return x + y;
    }

    public static void main(String[] args) {
        int myNum1 = topla(8,5.0);
        double myNum2 = topla(4.3, 6);
        System.out.println("int: " + myNum1);
        System.out.println("double: " + myNum2);
    }

Java’da Overloading Neden Yapılır?

Yukarıda da ifade ettiğimiz gibi Metot Overloading, aynı sınıfta aynı isimde birden fazla metot oluşturabildiğimiz ve tüm metotların farklı şekillerde çalıştığı bir Java özelliğidir. Bu özellik geliştiricilere çok sayıda fayda sunmaktadır. Bu faydalardan bazılarını şu şekilde sıralayabiliriz;

  • Programın okunabilirliğini artırır.
  • Programcılara farklı veri türleri için aynı yöntemi çağırabilme esnekliği sunar.
  • Clean code (temiz kod) oluşturmaya ve kodun karmaşıklığını en aza indirmeye imkan sağlar.
  • Programın çalışma hızını artırır ve bellekten tasarruf etmeye imkan tanır.

Overloading ile ilgili çok sorulan bazı sorular

Static metotlar overload (aşırı yüklemek) edilir mi?

Evet static olarak nitelendirilen metotlar da overload edilebilirler. Nitekim yukarıda overload ettiğimiz metotlar static olarak tanımlanmışlar.

Static olma durumunu değiştirerek overload etmek mümkün mü?

Hayır, tüm parametreleri yani metot signature’ları aynı olan iki metodu, yalnızca static’lik durumlarını değiştirerek overload etmek mümkün değildir.

Return type değiştirilerek overload etmek mümkün mü?

Hayır return type değişse de, iki metot parametre sayıları ve türleri itibari ile aynı ise, overload edilemezler.

Access modifiers değiştirilerek overload (aşırı yükleme) işlemi yapılabilir mi ?

Hayır aynı isim ve yanı parametrelere sahip iki metodun, access modifiers’larının (erişim belirteçleri) birbirinden farklı olması, overload edilebilmelerine imkan sağlamaz.

Author