Java Overloading ve Overriding Nedir? Aralarındaki Farklar (Detaylı Anlatım)

Bu yazıda Java overloading ve overriding kavramlarını detaylı şekilde inceleyeceğiz. Aralarındaki farklar, kullanım kuralları ve örneklerle konuyu net bir şekilde anlayacaksınız.

Kısa özet: Overloading compile-time’da, overriding ise runtime’da çalışan iki farklı OOP kavramıdır.

Overloading (Metot Aşırı Yükleme) Nedir?

Overloading, aynı sınıf içinde aynı isimli metotların farklı parametrelerle yeniden tanımlanmasıdır. Bu sayede aynı işi yapan ama farklı veri tipleriyle çalışan metotlar yazılabilir.

Overloading Kuralları

  • Parametreler mutlaka değişmelidir (MUST)
  • Dönüş tipi değişebilir (CAN)
  • Access modifier değişebilir (CAN)
  • Farklı exception fırlatabilir (CAN)
  • Aynı sınıfta veya alt sınıfta tanımlanabilir (CAN)
Önemli: Sadece dönüş tipi değiştirerek overloading yapılamaz.

Örnek

public class Toplama {
    public int ikiliTopla(int x, int y) {
        return x + y;
    }

    public double ikiliTopla(double x, double y) {
        return x + y;
    }
}

Compiler, parametre tipine bakarak hangi metodun çağrılacağını belirler.

Overloading Nasıl Çalışır?

Toplama t = new Toplama();

int sonuc = t.ikiliTopla(10, 5);
double sonuc2 = t.ikiliTopla(2.5, 3.5);

İlk çağrıda int parametreli metot, ikinci çağrıda double parametreli metot çalışır.

Reference Type ile Overloading

class Hayvan { }
class At extends Hayvan { }

class Test {
    public void yemekYe(Hayvan h) {
        System.out.println("Hayvanlar yemek yer");
    }

    public void yemekYe(At a) {
        System.out.println("Atlar ot yer");
    }
}

Overloading’de karar compile-time sırasında verilir. Yani referans tipi önemlidir.

Hayvan h = new At();
test.yemekYe(h);

Bu durumda Hayvan parametreli metot çalışır. Çünkü referans tipi compile-time’da belirlenir.

Overriding (Metot Üzerine Yazma) Nedir?

Overriding, alt sınıfın üst sınıftaki metodu kendi ihtiyacına göre yeniden yazmasıdır. Bu işlem runtime sırasında belirlenir.

class Hayvan {
    public void yemek() {
        System.out.println("Hayvanlar yemek yer");
    }
}

class At extends Hayvan {
    public void yemek() {
        System.out.println("Atlar ot yer");
    }
}

Bu durumda çağrılan metot, nesnenin gerçek tipine göre belirlenir.

Önemli: Overriding runtime polymorphism örneğidir.

Overloading vs Overriding

  • Overloading → Compile-time
  • Overriding → Runtime
  • Overloading → Parametre değişir
  • Overriding → Metot imzası aynı kalır
  • Overloading → Polymorphism yok
  • Overriding → Polymorphism vardır

Birlikte Kullanım

class Hayvan {
    public void yemek() {
        System.out.println("Hayvanlar yemek yer");
    }
}

class At extends Hayvan {
    public void yemek() {
        System.out.println("Atlar ot yer");
    }

    public void yemek(String s) {
        System.out.println("Atlar " + s);
    }
}

Bu örnekte hem overriding hem de overloading birlikte kullanılmıştır.

Sık Yapılan Hatalar

  • Sadece dönüş tipi değiştirerek overload yapmak
  • Overriding kurallarını ihlal etmek
  • Compile-time ve runtime farkını karıştırmak
  • Reference type davranışını yanlış anlamak

Sık Sorulan Sorular

Overloading nedir?

Aynı isimli metotların farklı parametrelerle tanımlanmasıdır.

Overriding nedir?

Alt sınıfta üst sınıf metodunun yeniden yazılmasıdır.

Overloading compile-time mı?

Evet, compile-time’da belirlenir.

Overriding runtime mı?

Evet, runtime’da belirlenir.

Sonuç

Java overloading ve overriding, OOP mantığını anlamanın en önemli parçalarından biridir. Aralarındaki farkı net anlamak, daha temiz ve hatasız kod yazmanı sağlar.

Etiketler: java overloading, java overriding, java oop, polymorphism

Son Güncelleme: 2026

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Blog where the most up-to-date software is followed. (En güncel yazılımların takip edildiği blog sitesi)

Java ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *