Java’da Constructors Kavramı (Yapıcı Methodlar)
Aslında her şey Constructors (Yapıcı Methodlar) ile başladı.Belki de en temel konu yapıcı methodlar o yüzden nesne yönelimli programlama konusunda bu konuyu iyi kavramak gerekir.
Constructor nedir ?
Constructors özel tipte bir fonksiyondur aslında.Türkçe’ye yapıcı inşa methodları olarak geçmiştir.Öncelikle bir tane sınıf tanımlayalım ardından o sınıfa ait bir nesne tanımlayalım.
- Öğrenci isimli bir Class tanımladım ve ona ait olabilecek parametreleri ekledim.
- Ardından Öğrenci sınıfımdan bir nesne tanımladım.
Daha önceden nesne üzerinden aşağıda ki gibi veri atamayı öğrenmiştik.Ayrıca nesne tanımlamayı öğrenmiştik.
- Aslında biz Oğrenci nesne = new Oğrenci () dediğimiz zaman default Constructor’ı referans etmiş oluyoruz.
- Ayrıca nesne üzerinden değişkenlere değer atamayıda görmüştük:
- Aksi belirtilmedikçe aslında sınıfların default Constructor var olarak kabul edilir. Yanı aslında biz default Constructor çağırmış olduk.
- Ayrıca Constructor yapısının bir return değeri yoktur.
- Şimdi Öğrenci Sınfımızın içine bir default Constructor tanımlayalım.
- Ardık bu default Constructor‘ın içine hangi kodları yazarsam onlar önce çalışır.
- Print alabildik çünkü nesne’yi çağırırken önce default Constructor‘ı çağırmış olduğumuz için önce o print fonksiyonu çalıştı.
- Biz eğer Öğrenci sınıfımızdan 2. bir nesne tanımlayıp onu’da aynı şekilde tanımlasaydık ondada bu print fonksiyonu çalışacaktı.
- Gördüğünüz gibi 2. kez çalıştı:
Constructor İnitialization İşlemi (Varsayılan Değer)
Constructor initialization işlemi ilk değer vermek anlamında kullanılır.Mesela bellekte bir nesne yaşamaya başladığında eğer bahsi geçen bir sınıfta ki özelliğe (yani mesela değişkene methdosa vs) herhangi bir değer verilmediyse biz bunu default olarak İnitialization işlemi yapabiliriz.Böylelikle dersadi isimli değişkene Constructor üzerinden başka bir deger atana kadar onun değeri java oldu:
Şimdi eğer Constructor çağrıldığında veri set etme işlemi yapmak istiyorsak onuda aşağıda ki görselde ki gibi yapabilirim:
- Dikkat ettiyseniz Constructor isimleri aynı.İŞte burada Çok biçimlilik örneğinde görmüştük isimler aynı lakin nasıl karışmıyor ? Çünkü Çok Biçimlilik kavramı devreyi giriyor (polimorfizm) ve aynı isimli olsa dahi biz hangisini çağırırsak o devreye giriyor olay bu .
Biz işlemlerimizi yaparken 2 Constructor yapsını da kullanabiliriz.Aslında zaten Constructor dediğimiz olay 2. olandır .İlk olan Constructor default olan Constructor yapısıdır.
- Artık birden fazla Constructor olduğu için biz bir nesne üretmeye çalıştığımızda ikisinden birini seçmemizi isteyecektir.Bizde hangisini kullanacaksak onu seçmemiz lazım.
- Biz Constructor yapsını kullarak verileri atama işlemi yapıcaz bunun için önce Constructor içini düzenlememiz gerek.
- Şimdi nesne2 üzerinden Constructor yapımın veri tiplerini hangi şekilde tanımlasaydık o şekilde verileri gönderiyorum.Veri tiplerine dikkat ediyoruz.
- Şimdi Constructor üzerinden parametreleri göndermiştik ama bir işlem yaptırtmamıştık.
- Şimdi Constructor‘a veri gönderdiğimiz this parametresi ile Ogrenci sınıfımızda ki isim değişkenini Constructor içinde isim değişkenine atamış olduk.
- Böylelikle biz Constructor yapımıza veri gönderip onu Öğrenci sınıfımıza atmış olduk.
- Şimdi artık nesnem üzerinden Öğrenci sınıfımın değişkenlerine eriştiğim zaman, çıktı aldığımda Constructor üzerinden gönderdiğim veriyi Constructor‘a yapısına giydirmiş olduk.
Peki bizim default değerimiz vardı ne oldu ona?
- Default olarak dersadi isimli değişkene java değerini atamıştık.Şimdi varsayılan olarak dersadi değişkeninin içinde java olması için bu örneğimizde bizim default Constructor yapısını çağırmamız gerekir.
- Nesne3 üzeriden dersadi isimli değişkeni çağırdığımda biz bir parametre eklemeden java değerinin gelmiş olduğunu gördük.
- Class içinde Default Constructor tanımlamak zorunda değiliz sadece kullanmak istiyorsak tanımlayabiliriz.
Şimdi test amaçlı default Constructor kodlarımızı silelim ve ne oluyor görelim.
- Gördüğümüz gibi boş Constructor kullanarak tanımladığımız nesneler hata verdi.
- Bunun sebebi eğer bir sınıfta parametre alan Constructor var ise ve aynı zamanda Paremetre almayan Constructor kullanacaksak eğer mutluka Class içinde tanımlamamız gerekir.
- Şimdi biz tekrardan sildiğimiz Constructor geri ekleyelim çünkü biz ikisinide kullanıcaz 🙂
This Deyimi
- Şimdi diyelim Paremetre alan bir Constructor tanımladım ve bu parametre alan Constructor içinde default Constructor içinde kodların da çalışmasını istiyorum.
- Eğer parametre alan Constructor içine this yerleştirirsem, parametre alan Constructor yapımı çağırdığım zaman önce default Constructor içinde ki kodlar önce çalışcak.
- default Constructor içinde ki kodlar çalıştıktan sonra da Paremetre alan Constructor içinde ki kodlarım çalışmaya devam edecek.
Umarım bu konuyu güzel anlatmışımdır 🙂 Kolaylıklar..