Bu yazıda, Object Oriented Programming, yani Nesne Yönelimli Programlama’nın en önemli unsurlarından bir tanesi olan Polymorphsim denince akla gelen iki kavramı, Overloading ve Overriding’i ele alacağız. Daha önce, Overloading Nedir? ve Overriding Nedir? başlıklı iki farklı yazıda bu kavramlar hakkında detaylı bilgilere yer vermiştik. Bu yazıda ise kısa bir özet geçip ardından bu iki kavram arasındaki farkların neler olduğunu sizlere göstereceğiz.
Overloading ve Overriding nedir?
Method Overloading, bir sınıf içerisinde aynı isme fakat farklı imzalara (parametrelerin tipi, sayısı, sırası) sahip metotların tanımlanması olarak ifade edilebilir.
Overriding ise parent class (super class) ait bir metodun, o sınıftan türetilmiş (child class) bir sınıf içerisinde aynı parametrelerle fakat farklı metod body’lerle yeniden oluşturulmasına, yerine geçirilmesine denir.
Özetle ifade etmek gerekirse, isimi ve parametreleri aynı olan fakat aralarında parent-child ilişkisi kurulmuş farklı class’larda yer alan metotlar overriding, aynı sınıfta bulunan isimleri aynı fakat parametreleri farklı metotlar overloading işlemine maruz kalmıştır. Aşağıdaki örnek, Overloading ve Overriding için bir örnektir.
Overloading’e Örnek
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
}
Overriding’e Örnek
public class Araclar {
public void sur(){System.out.println("Araç Sürüyorum”);}
}
public class Bisiklet extends Araclar{
public void sur(){System.out.println("Bisiklet sürüyorum”);}
public static void main(String args[]){
Bisiklet obj = new Bisiklet();
obj.sur();
// Output -Bisiklet sürüyorum-
}
}
Overloading ve Overriding Farkı ve Karşılaştırması
Overloading |
Overriding |
Metod Overloading compile-time polymorphism olarak | Method overriding ise run-time polymorphism olarak nitelendirilirler. |
Programın okunabilirliğini arttırır. | Halihazırda superclass’ta yer alan bir metoda, farklı işlevler eklenmesine olanak sağlar. |
Metod Overloading işlemi aynı class içerisinde yapılır. | Overriding işlemi ise birbirine inheritance (kalıtım) yolu ile bağlı iki farklı sınıfta gerçekleştirilir. |
Overloading metodun parametreleri değiştirilerek yapılır. | Overriding’te ise parametreler aynı olmak zorundadır. |
Overloading’te return type aynı veya farklı olabilir. | Overriding’te ise return type parent class’taki ile aynı veya onun co-variant’ı olmak zorundadır. |
Private ve final olarak nitelenen metotlar overloading edilebilirler. | Private ve final olarak nitelenen metotlar override edilemezler. |
Overloading icin inheritance gerekmez. | Fakat Overriding icin child-parent ilişkisi gereklidir. |
static metod’lar Overload edilebilir | static metotlar Override edilemezler. |
Overloading “static polymorphism” olarak nitelendirilir. | Overriding “dynamic polymorphism” olarak nitelendirilir. |