SORU
25 ŞUBAT 2009, ÇARŞAMBA


Neden süper.süper.() metodu, Java İzin Verilmiyor?

this question okudum ve bu kadar kolay yazma diye çözüldü olmadan çözülebilir değil) olacağını düşündüm:

@Override
public String toString() {
    return super.super.toString();
}

Eğer birçok durumda yararlı olup olmadığından emin değilim, ama merak ediyorumnedenbu başka dillerde de var gibi bir şey yok.

Siz ne düşünüyorsunuz?

DÜZENLEME: Netleştirmek için: Evet biliyorum, bu imkansız Java ve gerçekten hiç özlemedim. Bu işe şaşırmış derleyici bir hata oldu benim beklenen bir şey değildir. Ben sadece fikir vardı ve bunu tartışmak istiyorum.

CEVAP
25 ŞUBAT 2009, ÇARŞAMBA


Saklama ihlal ediyor. Üst sınıfın davranışlarını atlamak mümkün değil. Sense bazen bypass edebilmek için yaparkendisınıf davranışları (özellikle aynı yöntem içinde) ama ebeveyninizin. Örneğin, bir üs olduğunu varsayalım "ürün toplama", alt sınıfı temsil eden "kırmızı öğeleri Koleksiyonu" ve bunu temsil eden bir alt sınıfı "büyük kırmızı öğeleri bir koleksiyon". Bir anlamda kullanır:

public class Items
{
    public void add(Item item) { ... }
}

public class RedItems extends Items
{
    @Override
    public void add(Item item)
    {
        if (!item.isRed())
        {
            throw new NotRedItemException();
        }
        super.add(item);
    }
}

public class BigRedItems extends RedItems
{
    @Override
    public void add(Item item)
    {
        if (!item.isBig())
        {
            throw new NotBigItemException();
        }
        super.add(item);
    }
}

Sorun değil - Redİtems her zaman içerdiği öğeler kırmızı olduğunu emin olabilirsiniz. Şimdi farz edelimedildisüper aramak mümkün.süper.() ekleyin:

public class NaughtyItems extends RedItems
{
    @Override
    public void add(Item item)
    {
        // I don't care if it's red or not. Take that, RedItems!
        super.super.add(item);
    }
}

Şimdi ne istersek ekleyelim ve RedItems sabit kırık.

Bu mantıklı mı?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CareyHolzman

    CareyHolzman

    24 Ocak 2008
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008