SORU
20 NİSAN 2012, Cuma


Super arama (zaman) geçersiz kılarken yöntemi?

Kendi Android özel Dersim yaptığımda, 3 ** kendi özgün sınıf. Temel yöntemi geçersiz kılmak istediğim zaman, her zaman onCreate, onStop, vb gibi super() yöntem diyelim.

Ve bu olduğunu düşündüm, başından Android ekibi bize her zaman her yöntemi super geçersiz aramaları tavsiye olarak.

Ama, içindebirçok kitapGeliştiriciler, benden daha tecrübeli, sık sık super aramayı ihmal görüyorum ve gerçekten bir bilgi eksikliği olarak yaptıklarını sanmıyorum. Örneğin, super startElement, characters endElement atlanmış olduğu SAX çözümleyici bu temel sınıf bir bak:

public class SAXParser extends DefaultHandler{
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if(qName.equalsIgnoreCase("XXY")) {
            //do something
        }
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        //do something
    }

    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(qName.equalsIgnoreCase("XXY")) {
            //do something
        }else () {
            //do something
        }
    }
}

Eğer herhangi bir geçersiz kılma oluşturmak için çalışırsanız Tutulması ile yöntem veya herhangi bir diğer IDE, super Her zaman otomatik sürecinin bir parçası olarak oluşturulur.

Bu sadece basit bir örnek oldu. Kitap bulunuyorbenzer bir kod dolu.

Nasıl super çağırmalısınız zaman ve atlayabilirsiniz biliyorum demeyi biliyorlar mı?

PS. Bu spesifik bir örnek bağlayın. Sadece bir örnek, rasgele birçok örnek aldı.

(Bu bir acemi bir soru gibi gelebilir, ama gerçekten kafam karıştı.)

CEVAP
20 NİSAN 2012, Cuma


super yöntemini çağırarak, sen değilsingeçersiz kılmabu yöntemin davranışınıuzanan.

17* *bir çağrı gerektirir sınıfı bu yöntem için tanımlanmış herhangi bir mantık konser verecek. super'yöntemi uygulama geçersiz kılma s. çağırdığınızda önemli anı olabilir dikkate alın Örneğin:

public class A { 
    public void save() { 
         // Perform save logic
    }
}

public class B extends A {
    private Object b;
    @Override
    public void save() { 
        super.save(); // Performs the save logic for A
        save(b); // Perform additional save logic
    }
}

20* *çağrı A ve bu özel bir sırada B, Her ikisi için save() mantığı bir konser verecek. B.save(), A.save() denilen olmaz içinde super.save() arama olmasaydın. Ve eğer 28*,* 29 ** *sonra 27* arasaydın etkili sonra B.save() yapılır.

İstersenizgeçersiz kılarsuper'In davranışı (yani, tam olarak uygulanması görmezden ve kendinizi sağlamak), super aramamalısınız.

Verdiğiniz SAXParser örnekte, bu yöntemleri DefaultHandler implementations alt sınıflar onları geçersiz kılar ve bu yöntemleri için bir davranış sağlayabilir sadece boş. Bu yöntem için javadoc bu da dikkat çekti.

public void startElement (String uri, String localName,
    String qName, Attributes attributes) throws SAXException {
    // no op
}

Hakkında super() varsayılan çağrı kodu tarafından oluşturulan IDE, @barsju işaret yaptığı açıklama, her bir kurucu var örtülü bir çağrı için super() (bile bilmiyorsun yazma o senin kod), yani, bu bağlamda, bir çağrı super'ın varsayılan kurucu. IDE sadece sizin için yazıyor, ama aynı zamanda eğer varsa iptal edilmesini istiyorum. Ayrıca kurucular uygularken dikkat edin, super() ya da argümanlar (42* yani *) ile türevleri herhangi sadece çağrılabilirçok başındayöntemi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • akalyne

    akalyne

    13 Mayıs 2009
  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009