Görüşmede sorulan soru buydu. Eğer bir sınıf java'da birden fazla kurucu varsa ve ne zaman arayabilirim? Sözdizimini kastediyorum?java'dan başka bir kurucu çağırır.
cevap
ve bildiğim sözdizimi
this(< argument list >);
Ayrıca çağırabilir
super(< argument list >);
aracılığıyla bir süper sınıf yapıcı Hem olduğunu Bu tür çağrılar sadece ilk ifadede yapılabilir kurucu (böylece sadece bir başka kurucu arayabilir ve başka bir şey yapmadan önce).
kullanarak çağırırsınız. Ve buna referans gerektiren bir şey yapamazsınız. –
aynı zamanda kurucunun ilk satırında olmalı – sixtyfootersdude
evet, ilk satır bu şekilde uygulanacak ilk olacak – Francis
this(other, args);
Bu, yanıltıcı veya sadece yanlıştır! Başka ne var? Diğer kurucuyu bu (args-gereken-yapıcı) ya da 'süper (args-gereken-yapıcı-kurucu)' 'kullanarak,' –
örnek: Şunları yapabilirsiniz
public class FileDb {
/**
*
*/
public FileDb() {
this(null);
}
public FileDb(String filename) {
// ...
}
}
Evet, bunu yapabilirsiniz.
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
ikinci yapıcısı on bir default capacity
ile ilk çağırır:
ArrayList
uygulanması göz at. Bu,
telescoping/telescopic constructor pattern olarak adlandırılan
FYI.
O
- anahtar kelime
this
(muhtemelen açık tip argümanları ile başında) ile başlayan Alternatif yapıcı invocations JLS 8.8.7.1 Explicit Constructor Invokations tartışılan oluyor. Aynı sınıfın alternatif kurucusunu çağırmak için kullanılırlar.- Superklass kurucusu çağrıcılar anahtar sözcüğüyle (büyük olasılıkla açık tür argümanlarla öntanımlı olarak) veya Birincil ifadeyle başlar. Doğrudan üst sınıfın kurucusunu çağırmak için kullanılırlar. cevapların
Yok tamamlandı, bu yüzden boşlukları doldurmak için bu bir ekliyorum.
aşağıdaki kısıtlamalarla birlikte aynı sınıfta başka birini kurucusunu çağırmak veya süper sınıf arayabilirsiniz:
- O çağıran yapıcı kod ilk satırı olmalıdır.
this
ürününe yönelik açık ya da zımni bir referansı olamaz. Bu nedenle, bir iç sınıf (herhangi bir örnek yöntemi başvuruyorsa anonim olanı bile) veya statik olmayan bir yöntem çağrısının sonucunu parametre olarak iletemezsiniz.
(başkaları tarafından belirtildiği gibi) sözdizimi:
MyClass() {
someInitialization();
}
MyClass(String s) {
this();
doSomethingWithS(s);
}
soruyu netleştirmek misin? Nesneleri farklı şekilde oluşturmak için birden fazla kurucu vardır ve diğer sınıflardan çağrılabilir.Sadece bu amaç için yapıldılar. –
, bir kurucuyu başka birinden çağırmak anlamına gelir. – Woot4Moo
, bir kurucunun başka bir kurucudan çağrılmasına izin verilip verilmediğini soruyor ya da bir sınıfın birden fazla kurucuya sahip olup olmadığını sormuyor – Francis