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
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ı?
Neden “senkronize” Java 8'de İzin Veri...
Neden belirli Unicode karakterler içer...
Neden't statik Java yöntemleri ge...
Neden Java bize bir isim dosya adından...
≪ fark? süper T> ve <? T> ...