SORU
22 Temmuz 2009, ÇARŞAMBA


Neden bunu yapar() ve super() yapıcısı ilk deyim olmalıdır?

Java eğer bu ararsan gerektirir() veya super() yapıcısı ilk ifadesi olmalıdır. Neden?

Örneğin:

public class MyClass {
    public MyClass(int x) {}
}

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        int c = a   b;
        super(c);  // COMPILE ERROR
    }
}

Güneş derleyici söylüyor "süper Ara constructor içinde ilk deyim olmalıdır". Eclipse derleyici diyor "Yapıcı bir çağrı oluşturucu içinde ilk deyim olmalıdır".

Ancak, yeniden düzenlenmesi kodu biraz bu oluyor

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a   b);  // OK
    }
}

Burada başka bir örnek:

public class MyClass {
    public MyClass(List list) {}
}

public class MySubClassA extends MyClass {
    public MySubClassA(Object item) {
        // Create a list that contains the item, and pass the list to super
        List list = new ArrayList();
        list.add(item);
        super(list);  // COMPILE ERROR
    }
}

public class MySubClassB extends MyClass {
    public MySubClassB(Object item) {
        // Create a list that contains the item, and pass the list to super
        super(Arrays.asList(new Object[] { item }));  // OK
    }
}

Yani, öylemantık yürütme durdurma değilsüper çağrısı önce. Sadece tek bir ifade içine sığabilecek mi bu mantık yürütme durdurma.

this() aradığınız için benzer kuralları vardır. Derleyici diyor ki "bu çağrı oluşturucu içinde ilk deyim olmalıdır".

Neden derleyici bu kısıtlamalar var mı? Eğer derleyici bu kısıtlama var mı yoksa, kötü bir şey olacak burada bir kod örneği verebilir misiniz?

CEVAP
22 Temmuz 2009, ÇARŞAMBA


Üst sınıf constructor alt önce' 10**. çağrılmalıdır Eğer bu kurucu üst sınıf herhangi bir yöntem çağırırsanız, üst sınıf zaten düzgün yapıldığından emin olun.

Ne yapmaya çalışıyorsun, argüman olarak geçirmek için süper kurucu ise tamamen yasal, senin sadece inşa bu besten içi gibi yapıyorsun, ya da onları geçmek için yapıcı ve daha sonra iletmek için super:

public MySubClassB extends MyClass {
        public MySubClassB(Object[] myArray) {
                super(myArray);
        }
}

Eğer derleyici bu zorunlu değilse bunu yapabilirsiniz:

public MySubClassB extends MyClass {
        public MySubClassB(Object[] myArray) {
                someMethodOnSuper(); //ERROR super not yet constructed
                super(myArray);
        }
}

parent bir sınıf varsayılan bir oluşturucuya sahip olduğu durumlarda süper çağrısı compiler tarafından sizin için otomatik olarak eklenir. Object, nesneleri yapıcı Java devraldığı günden bu yana her sınıf bir şekilde çağrılmalıdır ve ilk idam olmalı. Süper otomatik ekleme() derleyici tarafından izin bu. Süper olurdu ilk görünür, yapıcı organları doğru sırayla yürütülen zorlar zorlanarak: Nesne ->Ana ->Çocuk ->- ^ChildOfChild . SoOnSoForth

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013
  • Rickymon Tero

    Rickymon Ter

    1 Ocak 2007
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012