2010-03-03 26 views
23

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.

+0

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. –

+4

, bir kurucuyu başka birinden çağırmak anlamına gelir. – Woot4Moo

+0

, 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

cevap

36

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).

+6

kullanarak çağırırsınız. Ve buna referans gerektiren bir şey yapamazsınız. –

+0

aynı zamanda kurucunun ilk satırında olmalı – sixtyfootersdude

+0

evet, ilk satır bu şekilde uygulanacak ilk olacak – Francis

6
this(other, args); 
+3

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,' –

5

örnek: Şunları yapabilirsiniz

public class FileDb { 

    /** 
    * 
    */ 
    public FileDb() { 
    this(null); 
    } 

    public FileDb(String filename) { 
    // ... 
    } 

} 
9

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:

örneğin ArrayList uygulanması göz at. Bu, telescoping/telescopic constructor pattern olarak adlandırılan

7

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
9

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:

  1. O çağıran yapıcı kod ilk satırı olmalıdır.
  2. 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); 
} 
İlgili konular