Sprite'i genişletdiğimde her zaman super() öğesini çağırmıyorum.
Ama sorun yok not calling super()
neden?
Şimdiye kadar, herhangi bir sorunum yok ve sprite'ı genişleten kurucuda super() öğesini çağıran kodu görmedim.
TextField nasıl?
Ayrıca TextField hakkında da bir sorunum yok.
Super() ya da olmamalı mıyım?Sınıf sprite actionscript3'te uzatıldığında super() yapıcıyı çağırmam gerekmiyor mu?
cevap
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.
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
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
Teşekkür örneği önce herhangi yöntemleri çağırmak unutmayın! Bu gizli işlevselliği (Otomatik Süper Ekleme) nereden biliyorsunuz? –
http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html - ** Constructor Yöntemleri adı verilen bölümün altında ** –
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ı? –