Konu tarihi:
Java'da bir yapıcıdan diğerine çağrı yapma konsepti (constructor chaining), nesnelerin başlatılmasında daha esnek bir yönetim sağlamak ve kodun tekrarı önlemek amacıyla ortaya çıkmıştır. Bu, bir sınıf içindeki yapıcıları veya kalıtım hiyerarşisinde bir zincir tekniği ile bağlamaya olanak tanır.
Sorun:
Birçok parametreye sahip karmaşık sınıflar tasarlarken, her yapıcıda başlatma mantığını kopyalamak zor ve etkisizdir. Bu, kodun tekrarı, hatalarla sonuçlanabilir ve sistemin sürdürülebilirliğini azaltır.
Çözüm:
Java'da bir yapıcıdan diğerini, mevcut sınıfın yapıcısı için this() anahtar kelimesi ve üst sınıfın yapıcısı için super() kullanarak çağırabilirsiniz. Bu, başlatma mantığını merkezi bir şekilde yönetmeye, okunabilirliği artırmaya ve hata olasılığını azaltmaya imkân tanır.
Kod örneği:
public class Person { private String name; private int age; public Person(String name) { this(name, 0); // başka bir yapıcıyı çağırır } public Person(String name, int age) { this.name = name; this.age = age; } }
Anahtar özellikler:
this() ile yapıcıyı çağırmak, yapıcının ilk satırı olmalıdırsuper() aracılığıyla gidebilirYapıcıyı, yapıcının ilk satırı olmayan bir yerde çağırmak mümkün mü?
Hayır. this() veya super() çağrısı her zaman yapıcının ilk satırı olmalıdır, aksi takdirde kod derlenmez.
Eğer miras alınan yapıcıda super() çağrısı yapılmazsa ne olur?
Bu durumda Java, üst sınıfın argümansız yapıcısını otomatik olarak çağırır. Eğer böyle bir yapıcı yoksa, program derlenmez.
Kod örneği:
class Base { public Base(int x) {} } class Derived extends Base { public Derived() {} // Hata! Parametresiz Base() yapıcısı yok }
Bir yapıcıda this() kaç kez çağrılabilir?
Tam olarak bir kez ve yalnızca ilk satırda. Tekrar veya ilk olmayan bir çağrı derleme hatası oluşturur.
this() çağrısının ilk satır olmamasıProgramcı, sınıfın her yapıcısında aynı başlatmayı kopyalar — mantıkta bir değişiklik olduğunda, tüm yapıcıları değiştirmeyi unutmamalıdır.
Artıları:
Eksileri:
Programcı, maksimum sayıda parametreye sahip yapıcıyı ana olarak kullanır ve diğerlerini this() aracılığıyla ona devreder — mantık merkezi hale getirilmiştir.
Artıları:
Eksileri: