Java’da override aslında kısaca metodumuzu geçersiz kılma işlemidir. Java’da Override kavramı nesne yönelimli programlamada sıkça karşımıza çıkacak olan bir kavramdır. Biz bir ana sınıf (super class) oluşturduğumuzda ve o ana sınıfı başka bir alt sınıfta(sub class) miras aldığımızı düşünelim. Miras aldığımız bu sınıfın içerisindeki bazı özellikleri veya metotları değiştirmek veya silmek isteyebiliriz bu gibi işlemleri Override kavramı ile yaparız.
Java’da Override Kullanımının Avantajları
- Aynı metodun birden fazla kez uygulanabilmesini sağlar.
- Temiz ve sade bir kod düzeni oluşur.
- Bir sınıfın hangi davranışa sahip olabileceğini ve nasıl uygulanabileceğini tanımlar.
Java’da override kavramımızı pekiştirmek adına örneklerimize geçelim.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class hayvan {//hayvan sınıfımız superclass dır. public void goster() {//metodumuzu oluşturduk. System.out.println("Hayvan sesleri"); } } class horoz extends hayvan {//hayvan sınıfımızı miras alarak horoz sınıfı olusturduk. @Override //override işlemimizi yaparak metodumuzu oluşturduk. public void goster() { System.out.println("Öter"); } } //Main sınıfımızıoluşturduk. class Main { public static void main(String[] args) { //nesnemizi oluşturduk. horoz dhoroz = new horoz(); //ve goster metoduyla ekran çıktımızı verdik. dhoroz.goster(); } } |
Ekran Çıktısı
1 | Öter |
Yaptığımız bu örnekte ilk olarak hayvan ana sınıfımızı (super class) oluşturduk ve içerisine bir goster() metodu tanımladık. Sonrasında ise hayvan sınıfından miras alarak bir horoz alt sınıfı (subclass) oluşturduk ve içerisine goster() metodunu tanımlayarak override işlemimizi gerçekleştirerek hayvan sınıfımızdaki metodu geçersiz duruma getirdik. Main sınıfımızda ise nesnemizi oluşturarak ekran çıktımızı verdik.
Java’da Override (Geçersiz Kılma) Kuralları
- Üst ve alt sınıfımızın aynı metot adına, aynı dönüş türüne ve aynı parametre listesine sahip olmalıdır.
- Metotlar, yalnızca alt sınıf (subclass) tarafından miras alınmışlarsa override işlemi uygulanabilir.
- Bir metot miras alınmıyorsa override işlemi uygulanamaz
- Yapıcı (Constructor) metotlarda override (geçersiz kılma) işlemi uygulanamaz.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class arac {//arac sınıfımız superclass dır. public void goster() {//metodumuzu oluşturduk. System.out.println("Araç motorları"); } } //arac sınıfımızı miras alarak clio sınıfımızı oluşturduk. class clio extends arac { //override işlemimizi yaparak metodumuzu oluşturduk. @Override public void goster() { System.out.println("Clio = 1.6 motor"); } } //arac sınıfımızı miras alarak corolla sınıfı oluşturduk. class corolla extends arac { //override işlemimizi yaparak metodumuzu oluşturduk @Override public void goster(){ System.out.println("Corolla = 1.2 motor"); } } //Main sınıfımızıoluşturduk. class Main { public static void main(String[] args) { //nesnelerimizi oluşturduk clio reno = new clio(); corolla toyota = new corolla(); reno.goster(); toyota.goster(); } } |
Ekran Çıktısı
1 2 | Clio = 1.6 motor Corolla = 1.2 motor |
Yaptığımız bu örnekte arac ana sınıfımızı oluşturduk ve içerisine goster() metodunu tanımladık. Sonrasında ise clio alt sınıfımızı oluşturduk ve override yöntemi ile içerisine goster() metodumuzu tanımladık. Clio sınıfımızda yaptığımız işlemin aynısını corolla sınıfında da yaptık. Main sınıfında nesnelerimizi oluşturduktan sonra goster() metodumuz ile ekran çıktımızı verdik.
Java’da SUPER Anahtar Kelimesi Kullanımı
Java’da override işlemini yaparken, ana sınıfımızın (super class) metoduna erişmek isteyebiliriz. Ana sınıfımızın metoduna erişmek istediğimizde de Super anahtar kelimemizi kullanırız. Super anahtar kelimesi ile ilgili bir örnek yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class arac {//arac sınıfımız superclass dır. public void goster() {//metodumuzu oluşturduk. System.out.println("Araç motorları"); } } //arac sınıfımızı miras alarak clio sınıfımızı oluşturduk. class clio extends arac { //override işlemimizi yaparak metodumuzu oluşturduk. @Override public void goster() { //super metodumuzu kullandık. super.goster(); System.out.println("Clio = 1.6 motor"); } } //arac sınıfımızı miras alarak corolla sınıfı oluşturduk. class corolla extends arac { //override işlemimizi yaparak metodumuzu oluşturduk @Override public void goster(){ System.out.println("Corolla = 1.2 motor"); } } //Main sınıfımızıoluşturduk. class Main { public static void main(String[] args) { //nesnelerimizi oluşturduk clio reno = new clio(); corolla toyota = new corolla(); reno.goster(); toyota.goster(); } } |
Ekran Çıktısı
1 2 3 | Araç motorları Clio = 1.6 motor Corolla = 1.2 motor |
Bu örneğimizde, yukarıda kullandığımız örneğin aynısını verdik, tek farklı tarafı bu örneğimizde super anahtar kelimemizi kullanmış olmamızdır. İlk olarak ana sınıfımız (super class) olan arac sınıfımızı oluşturduk, bu sınıfımızın içinde goster() metodunu tanımladık. Sonrasında ise clio alt sınıfımızı (sub class) oluşturduk ve içerisine goster() metodumuzu tanımladık. Bu goster() metodumuzun içerisine super.goster() metodumuzu da yazdık, bu işlem bize alt sınıftan üst sınıfın metoduna ulaşmamızı sağlayarak ekran çıktımızı vermemizi sağlıyor. Sonrasında ise corolla sınıfımızı oluşturduk ve içerisine metodumuzu tanımladık. Main sınıfımızı oluşturduktan sonra nesnelerimizi oluşturduk ve goster() metodumuzu ile birlikte bize ekran çıktılarımızın verilmesini sağlamış olduk.
“One last ride” derken aslında Java’ya ne kadar hakim olduğumu göstermek istiyordum, yıllarca hani son defaydı diyerek sorgulandım, alay konusu oldum. Meseleye açıklık getirdiğiniz için teşekkür ederim. Bu arada hazır Türkiye’deyken o Jason’a söyleyin, Sakarya’da 2007 model Serçe buldum onu almadan gelmesin Amerika’ya. Hızınız bol, şeridiniz boş olsun.