SORU
29 Temmuz 2009, ÇARŞAMBA


Java hata: Örtülü süper oluşturucu varsayılan kurucu tanımlanmamış

Şuna benzer basit bir Java kod yapısı var:

abstract public class BaseClass {
    String someString;
    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}

public class ACSubClass extends BaseClass {
    public ASubClass(String someString) {
        super(someString);
    }
    public String getName() {
        return "name value for ASubClass";
    }
}

BaseClass her biri kendi şekilde getName() yöntem (template method pattern) uygulanması oldukça birkaç sınıfları var.

Bu iyi çalışıyor, ama alt sınıflar gereksiz yapıcı olması hoşuma gitmiyor. Yazmak için daha fazla ve bakımı zor. Eğer BaseClass kurucu metot imza değiştirmek için olsaydı, tüm alt sınıfları değiştirmek zorunda kalacak.

Ben alt sınıflardan gelen yapıcı kaldırdığınızda, bu derleme zamanı hatası:

Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor

Ben yapmaya çalışıyorum ne mümkün?

CEVAP
29 Temmuz 2009, ÇARŞAMBA


Hiçbir yapıcı olan bir sınıf olduğundan bu hatayı alırsınızvarsayılanargüman daha azdır ve aşağıdaki kodu eşdeğeri olan yapıcı,:

public ACSubClass() {
    super();
}

Ancak beri BaseClass beyan bir sınıf (ve bu nedenle yok varsayılan, no-arg constructor derleyici olur aksi takdirde bu yasa dışı bir sınıf uzanan BaseClass diyemezsin super(); çünkü orada değildir no-argüman yapıcı BaseClass.

Bu muhtemelen küçük bir alt sınıf otomatik olarak bir temel sınıf olan herhangi bir yapıcı olduğunu düşünebilirsiniz, çünkü mantığa aykırı.

En basit yol bu olduğu için taban sınıf olmadığını ilan yapıcı (ve dolayısıyla varsayılan, no-arg constructor) veya bir beyan yok-arg constructor (ya da kendisi ya da yanında başka markalar). Ama çoğu zaman bu yaklaşım, kurucu geçirilen her sınıfın okunaklı bir örneği inşa etmek gerekir, çünkü uygulanacak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • Flohoo

    Flohoo

    12 EYLÜL 2009
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006