2009-02-04 13 views
10

Başka bir sınıftan miras alan bir sınıf üzerinde çalışıyorum, ancak "Sembol yapıcı Hesabı() bulunamıyor" diyerek bir derleyici hatası alıyorum. Temel olarak, yapmaya çalıştığım, Hesap - Hesaptan para çeken/para yatıran yöntemler ile bir denge kurması anlamına gelen bir YatırımAccountı yapmaktır. Yatırım Hesabı, benzerdir, ancak bakiye, hisse senedindeki hisselerin nasıl paylaştırıldığını Birçok pay belirli bir miktar parayla yatırılır veya geri çekilir. İşte alt sınıf InvestmentAccount ait (derleyici problemi işaret nerede civarında) ilk birkaç satır var:Java'daki Kalıtım - "Sembol oluşturucu bulunamadı"

public class InvestmentAccount extends Account 
{ 
    protected int sharePrice; 
    protected int numShares; 
    private Person customer; 

    public InvestmentAccount(Person customer, int sharePrice) 
    { 
     this.customer = customer; 
     sharePrice = sharePrice; 
    } 
    // etc... 

Kişi sınıfı başka bir dosya (Person.java) tutulur. Şimdi burada üst sınıf Hesabı ilk birkaç satır var:

public class Account 
{ 
    private Person customer; 
    protected int balanceInPence; 

    public Account(Person customer) 
    { 
     this.customer = customer; 
     balanceInPence = 0; 
    } 
    // etc... 

var mı derleyici sadece Hesap sınıfından Hesabı için sembol yapıcısı okumuyor herhangi bir neden? Ya da YatırımAraba içinde Hesap için yeni bir kurucu tanımlamalı mıyım?

Teşekkür

cevap

25

InvestmentAccount s yapıcı kullanım super(customer). bir boş yapıcı değil çünkü

Java sadece yapıcısı Account sahiptir çağırmak nasıl bilemez. super()'u yalnızca temel sınıfınız boş bir yapıcı varsa atlayabilirsiniz.

Değişim

public InvestmentAccount(Person customer, int sharePrice) 
{ 
     this.customer = customer; 
     sharePrice = sharePrice; 
} 

public InvestmentAccount(Person customer, int sharePrice) 
{ 
     super(customer); 
     sharePrice = sharePrice; 
} 

için çalışacağını söyledi.

+0

Kural olarak, uygun olduğunda super() çağrıcımı her zaman kurucuma koyarım. – eljenso

1

Temel sınıfın varsayılan yapıcısı yoksa (bağımsız değişkensiz) temel sınıfın yapıcısını açıkça çağırmalısınız.

public InvestmentAccount(Person customer, int sharePrice) { 
    super(customer); 
    sharePrice = sharePrice; 
} 

Ve alt sınıfının bir örneğini değişken olarak customer yeniden tanımlama yok: Senin durumunda

, yapıcı olmalı!

1

super() yöntemini çağırın. Hesap (Kişi) yapıcısını çağırmak istiyorsanız, ifadeyi süper (müşteri) kullanın; Ayrıca, bu yapıcı

+0

“Olmalı” değil, “zorunda”. – Bombe

1

sizin InvestmentAccount ilk statment olmak Ya Account sınıfta bir varsayılan kurucu tanımlamalıdır:

public Account() {} 

Ya InvestmentAccount yapıcı içinde super(customer) diyoruz.

2

Üst sınıf oluşturucusunu çağırmanız gerekir, aksi halde Java, alt sınıfta üst sınıfı oluşturmak için hangi kurucuyu çağırdığınızı bilmez.

public class InvestmentAccount extends Account { 
    protected int sharePrice; 
    protected int numShares; 
    private Person customer; 

    public InvestmentAccount(Person customer, int sharePrice) { 
     super(customer); 
     this.customer = customer; 
     sharePrice = sharePrice; 
    } 
}