ÖNEMLİ : Kendim için aldığım notlar. Umarım size de bir faydası olur. Kullanılan her bir makale referans olarak eklenmiştir.

Java’da Kalıtım(inheritance) ve Java’da Polimorfizm Serisi


  1. Java’da Polimorfizm 1 - Amaç?
  2. Java’da Polimorfizm 2 - İzlenecek Kurallar Nelerdir?
  3. Java’da Polimorfizm 3 - Casting
  4. Java’da Polimorfizm 4.1 - Statik ve Dinamik Bağlanma 1
  5. Java’da Polimorfizm 4.2 - Statik ve Dinamik Bağlanma 2
  6. Java’da Polimorfizm 4.3 - Dinamik Bağlanma Örnek
  7. Java’da Polimorfizm 5 - Soyut(Abstract) Sınıflar ve Arayüzler(Interfaces)

Genel Bakış

Bu bölümde Java’da dinamik bağlanmayı bir örnekle pekiştireceğiz. Önceki bölümlerde olduğu gibi bir adet Person, bir adet de Person sınıfını miras alan Student sınıfımız bulunmaktadır.

Örnek

p bir Person referansı olsa da, başvurduğu asıl nesne çalışma zamanında Student sınıfına ait olacaktır. Yani p.status(1) çağrısını yaptığımızda status metodunu çağırmak için Java’nın ilk bakacağı yer Student sınıfı olacaktır. Fakat Student sınıfında böyle bir metodun olmadığını görüyoruz. Fakat Student sınıfı Person sınıfını miras aldığı için, Java bir de Person sınıfına bakacaktır. Person sınıfında status metodunu bulduk. Kaldığımız yerden devam edebiliriz.

status metodunun içine girdiğimizde karşımıza bir if-else ifadesi çıkmaktadır. Burada this.isReady(num) ifadesi ile karşılaşıyoruz. Peki Person sınıfı içinde this anahtar kelimesi ne anlama geliyor? this anahtar kelimesi ile çağırmaya çalıştığımız metot, Person sınıfının içindeki isReady metodu mu? yoksa Student sınıfı içinde bulunan isReady metodu mu? Kodu çözümlerken şu anda Person sınıfında olsak da, this anahtar kelimes çalışma zamanında Student nesnesini temsil etmektedir. Yani this dinamik olarak Student nesnesine bağlanır. Bu sebepten ötürü tekrardan Student sınıfına dönmemiz gerekecektir. Burada isReady metodu 1>0 dan büyük olduğu için true bir yanıt döndürecektir. Sonuç true döndüğü için Person sınıfı içindeki if bloğu içine girecek ve aşağıdaki sonucu alacağız.

1
I am ready: Hasan

this Anahtar kelimesi

Yukarıdaki örnekten devam ederek this hakkında birkaç bilgi paylaşmak istiyorum. System.out.println("I am ready: "+this); Burada this anahtar kelimesinin neden toString metoduna karşılık geldiğini ve çıktı olarak “Hasan” yazdırdığını sorabilirsiniz. this anahtar kelimesi bazı durumlarda this.isReady de olduğu gibi ilgili nesnenin metodunu, bazı durumlarda mevcut nesnenin üye değişkenlerini, bazen de mevcut nesnenin kurucusunu çağırırken kullanırız. Nasıl kullanılırsa kullanılsın her durumda çalışma zamanındaki gerçek nesneyi temsil ettiğini unutmayın.

Peki burada neden sadece this anahtar kelimesini kullandık. Aslında kullanmasaydık ne olacaktı sorusunu sorsak, kullandığımızda ne olacağını daha net anlayabiliriz. this anahtar kelimesinin mevcut nesneyi işaret ettiğini söylemiştik. Özünde biz this anahtar kelimesini yalın olarak kullandığımızda objenin kendisini işaret ederiz. Şayet bunu ekrana yazdırmak istediğimizde şu şekilde bir çıktı ile karşılaşabiliriz.

1
Student@11028347

Aslında javanın neden bu şekilde bir isimlendirme yaptığından şu makalelerde bahsetmiştim. 1, 2

Kısaca özet geçecek olursam, java, doğrudan nesneyi yazdırmak istediğimizde Object sınıfının toString metodunu çağırır.

metodun içeriğine baktığımızda döndürülen ifade sınıfın ismi + @ simgesi + integerdan oluşan bir takım sayı şeklindedir. Yalnız biz Person sınıfında bu metodu aşağıdaki şekilde geçersiz kıldığımız(override) için;

1
2
3
public String toString(){
    return name;
}

name üye değişkenini döndürecektir.

Referanslar