2011-09-24 10 views

cevap

28

sonra flaş çocuğunuzun yapıcı önce örtük çağrı super()edecektir. Yani:

public class Parent { 
    public function Parent() { 
     trace("Parent"); 
    } 
} 

public class Child extends Parent { 
    public function Child() { 
     trace("Child"); 
    } 
} 

new Child(); 
// Parent 
// Child 

Yani çocuğunuzun yapıcı esasen Yani, hayır, super() için açık çağrı atlayarak genellikle olumsuz çocuğunuzun sınıf etkilemez bu

public function Child() { 
     super(); // <-- Added by flash! 
     trace("Child"); 
    } 

benziyor.

Öyleyse neden açıkça super() aramak isteyeyim?

Birinci nedeni flaş sadece hiç otomatik ana sınıfları yapıcı argümanları gerektiriyorsa, o zaman açıkça bu argümanlarla diyoruz gerekecektir, yani super bir parametresiz çağrısı üretecektir olduğunu. Bu durumda super(args...) aramayı atlarsanız, bir derleyici hatası alırsınız. Hatta ebeveyn parametresi olmayan yapıcı varsa

İkincisi, sen kurucular yürütmek sırasını kontrol etmek super() kullanabilirsiniz. Flash, her zaman childs yapıcısından önce aramayı arayacaktır. Yani bu emri değiştirmek istersen. Sonra, ters sırayla bunu yapar . Yoksa yapabilirdi:

public class Child extends Parent { 
    public function Child() { 
     if(false) super() 
    } 
} 

flaş bir çağrı var görür, çünkü öyle değil:

public class Child extends Parent { 
    public function Child() { 
     // work before initilizing parent 
     super() 
     // work after initilizing parent 
    } 
} 

Son olarak, orada çok karanlık bir yol diyerek Ailen kurucusunu çağırmak değil bir tane ekle. Ancak, bir if (false)'un arkasında olduğu için asla çağrılmadığı için, üst sınıf asla başlatılamaz.

+0

Teşekkür örneği önce herhangi yöntemleri çağırmak unutmayın! Bu gizli işlevselliği (Otomatik Süper Ekleme) nereden biliyorsunuz? –

+4

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html - ** Constructor Yöntemleri adı verilen bölümün altında ** –

+1

Ana kurucunun bastırılması, atalarının yapıcılarının hiçbirinin aranmadığı anlamına gelir veya sadece anlık süper sınıfı? –

1

Aramayı temel kurucudan güvenle hariç tutabilirsiniz. Kurucuda super() numaralı telefonu aramazsanız, derleyici, temel yapıcıya argüman içermeyen bir çağrı ekler. Flaş Çocuğunuz yapıcı içinde super() için bir çağrı tespit etmezse

4

super()'u açıkça aramazsanız, Flash, kurucunuzdaki diğer tüm kodları'dan önce otomatik olarak yapacaktır.

super()'u açıkça çağırırsanız, yazdığınız satırda çağrılır.

Ancak ayarlayabilir veya herhangi this veya super özelliklerini almak ya da süper sınıf büyük bir cevap için