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.
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)
Ö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.
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.