Object Oriented Programming (Nesne Yönelimli Programlama) ve Polymorphsim denince akla gelen ilk kavramlardan bir tanesi olan Override – Overriding nedir? Nasıl Yapılır? Merak ediyorsanız, doğru yerdesiniz.
Overriding Nedir?
Türkçe’ye Geçersiz Kılma olarak çevirebileceğimiz Override, parent class’a (super class) ait bir metodun, ismine veya parametrelerine dokunulmaksızın, yalnızca metod body’si değiştirilerek, o sınıftan türetilmiş bir child class (subclass) içerisinde değiştirilmesine/yerine geçirilmesine olanak sağlayan bir işlemdir. Polymorphism ve Object Oriented Programming içerisinde oldukça önemli bir yere sahip olan Overriding işlemi için dikkat edilmesi gereken bazı kurallar vardır.
Overriding Nasıl Yapılır?
İlk olarak, override edilecek olan metodun, parent class’ta bulunan bir metot olması gerekir. Yani iki class arasında inheritance (kalıtım) olması gerekmektedir. Overridden (değiştirilen) metod ile Overriding (sonradan oluşturulan) metodun;
- İsmi
- Parametreleri
- İmzası
- Dönüş Türü (Return Type)
Aynı olmalıdır. Ancak return type, parent bir class ise Overriding metottaki ”return type” child class’lardan biri olabilir. Buna covariant return type denir. Yani, return type’ı void olan, int, double, char vb. primitive bir tür olan, Integere, Long, Short vb. Wrapper Class’lardan olan metotların, return type’ları değiştirilemez. Ancak return type’ı Animal olan metodun return type’ı override edilirken Animal’ın child class’ı olan Cat olarak çevirilebilir. Bunların dışındaki kuralları şu şekilde sıralamak mümkündür;
- Override işlemi aynı sınıfta değil, yalnızca alt bir sınıfta gerçekleştirilebilir.
- Final metodlar override edilemezler.
- Static olarak belirtilen metotlar override edilemezler.
- Bir metod miras alınamıyorsa, geçersiz kılınamaz. Dolayısı ile access modifier’ı private olan metotlar override edilemezler.
- Overriding (sonradan oluşturulan) metodun access modifier’ı daha geniş olabilir fakat daha dar olamaz. Örneğin super-class’ta protected olarak belirtilen bir metot, subclass’ta public olarak nitelenebilir fakat private olarak nitelendirilemez.
- Constructor’lar override edilemezler.
// ilk olarak Araçlar isimli bir Parent Class oluşturalım.
//Ve içerisine sür isimli bir metot tanımlayalım.
public class Araclar {
public void sur(){System.out.println("Araç Sürüyorum”);}
}
//Bisiklet isminde ikinci bir class oluşturup Araçlar’ın child class’ı yapalım.
//Ve parent class’taki ile aynı isimde bir metot oluşturalım.
// Ardından ihtiyaçlarımızı karşılamak üzere yalnızca method body’yi değiştirelim.
class Bisiklet extends Araclar{
void sur(){System.out.println("Bisiklet sürüyorum”);}
// Son olarak main metodun içerisinde bir obje oluşturarak aldığımız sonuçları karşılaştıralım.
public static void main(String args[]){
Bisiklet obj = new Bisiklet();
obj.sur();
// Output -Bisiklet sürüyorum- şeklinde olacaktır.
//Böylelikle sur metodumuzu override etmiş olduk.
}
}
Overriding Ne İçin Yapılır? – Faydaları Neler?
Overriding, nesne yönelimli programlama için oldukça önemlidir. Bu özellik, bir sınıfın tüm türevleri için ortak olan yöntemleri, bazı istisnai alt sınıflar için özel olarak yeniden tanımlamaya imkan verir. Bu sayede kodun yeniden kullanımı, mümkün hale gelir. Bu da Java’nın polymorphsim’deki ‘tek uygulama, birden fazla metot’ idealini destekler hale gelir.
Sık Sorulan Sorular
Static metodlar override edilebilir mi?
Hayır, static metotlar override edilemezler.
Main metot override edilebilir mi?
Hayır, zira main metot da static bir metoddur.
Constructor override edilebilir mi?
Hayır, constructor’lar override edilemezler.
Private metotlar override edilebilir mi?
Hayır, private metotlar override edilemezler. Yukarıda da ifade ettiğimiz üzere, bir metotun override edilebilmesi için, üst bir sınıftan onu miras alabilmesi gerekir.
@Override annotation ne için kullanılır?
@Override ifadesi, child class’ta overriding edilen metodun bir üst satırına yazılır. Bu belirteç, compiler’ı doğru bir şekilde yönlendirmek, daha okunaklı bir kod oluşturmak ve overriding işleminde bir hata varsa uyarı almak için kullanılır. Daha detaylı bilgi için Java @Override ifadesi nedir ve ne için kullanılır? yazımıza göz atın.
Overloading ve Override farkları neler?
Overloading, bir metodun, aynı isimle, aynı sınıfta fakat farklı parametrelerle oluşturulmasına nedir. Overriding’te ise bir metod, aynı isim aynı imza ve aynı parametrelerle, fakat birbirine inheritance ile bağlı olan farklı bir sınıflarda oluşturulur. Her iki özellik de polymorfizmin bir örneğidir. Daha detaylı bir şekilde görmek için Overloading ve Overriding Nedir? Farkları Neler? yazımıza göz atın.