15 Aralık 2014 Pazartesi

Constructor

      S.a. Arkadaşlar,
      Bugünkü konumuz constructor yani yapılandırıcılardır. Her ne kadar yapılandırıcı kelimesi olsa da Türkçe karşılığı olarak biz yine constructorı kullanacağız. Nedir peki bu constructor ?
        Bir nesnenin otomatik olarak oluşmasını sağlayan metodlara benzeyen , fakat dönüş tipi olmayan sınıfla aynı isimdeki yapıya diyoruz. Her sınıf bir constructori vardır. Fakat eğer biz bunu tanımlamazsak derleyici bunu bize otomatik olarak tanımlar. Ve de tanımlanan constructor class ile aynı erişim belirticine sahiptir. Yani public sınıfımız varsa constructor da public olmalıdır. Tabi private, procted de olabilirler.
         Bu kadar tanım herhalde şimdilik yetmiş olmalı. Peki kod kısmına geçelim yavaş yavaş gerekli yerlerde yine kısa yorumlarla konuyu daha iyi pekiştireceğimize inanıyorum.
Class A{
         A(){ } // A sınıfının yapılandırıcı
}
         Fakat şöyle bir durum da var. Yukarıda otomatik olarak constructor tanımlanır demiştik ama bu arka planda olur . Biz görmüyoruz diye yok değildir. Bu konuya dikkat etmemiz gerekir. Fakat şöyle bir nokta da vardır. Biz kendimiz bir constructor tanımladığımızda artık otomatik olarak derleyici tarafından constructor tanımlanmaz. Bunu ise şöyle bir örnek üzerinden yaparsak belki daha iyi anlamış olacağız.
Class A{
                A(int a, int b){
//kodlar
}
}
       Main içinde bildiğiniz üzere A a = new  A(); il obje oluşturup bunu kullanabiliyorduk fakat burada derleyici hata verecektir. Bunun sebebi ise constructor içinde parametre tanımlanmış ve objemiz de argüman almalı yani A a = new A(10,20); gibi olmalıdır. Peki yukarıdaki obje tanımının doğru olabilmesi ne yapmamız lazm. Hemen söyleyelim. A sınıfın içine A(){} eklememiz gerekmektedir. Tekrardan toparlamak gerekirse ; otomatik olarak çağırıldığında böyle bir tanıma gerek duymazdık , fakat elle tanımladığımız için constructorı , bu sefer A() {} eklememiz de gerekti.

Özelliklerine bakmaya devam edelim birlikte ,
Class A{
       Void A(){} // bu tanımla doğrudur fakat bu constructor değil,metoddur.
                          //burada A(){} otomatik tanımlanır, ama görünmez
}

                Tekrar bir sınıf ve bir constructor tanımlayıp bazı özelliklerinin üzerinde duralım
Private Class A{
         Private A(){ //erişim belirteci sınıfınki ile aynı olmalı demiştik
         Super(); // ilk satır super()/this() olmalı !!
          //kodlar
          Private A(int a) {} // overload yapabiliyoruz, fakat override yapamayız.
}
}

Kaynak
http://www.injavawetrust.com/pure-java-18-constructor-01/


Hiç yorum yok:

Yorum Gönder