2017-06-14 84 views
0

我正在學習計算機科學課程中的繼承。 我很困惑,爲什麼我的代碼無法正常工作。 這是教授已與提供的代碼:如何正確使用「擴展」?

public class Store{ 

public final double SALES_TAX_RATE = 0.05; 
private String name; 

public Store(String name){ 
    setName(name); 
    } 
    public String getName(){ 
    return name; 
    } 
    public void setName(String name){ 
    this.name = name; 
    } 

    public String toString(){ 
    return "Name: "+ name; 
    } 
    } 

分配要求我們建立網上商店具有以下附加屬性:一個互聯網地址,並且在網站寫的編程語言。編碼新類的構造函數和toString方法。

這正是然而,我已經做了我的代碼無法正常工作:

public class WebStore extends Store 
{ 

String Link; 
String Lang; 

public WebStore(String Link, String Lang) 
{ 
this.Link = Link; 
    this.Lang= Lang; 
    } 

    public void setLink(String Address) 
    { 
    Link = Address; 
    } 

    public String getLink() 
    { 
    return Link; 
    } 

public void setLang(String Language) 
    { 
    Lang = Language; 
    } 
public String getLang() 
    { 
    return Lang; 
    }  
} 

這是錯誤即時得到: WebStore.java:9:錯誤:在類的構造函數商店商店不能應用給定類型; { ^ 要求:找到字符串 :沒有參數 原因:實際的和正式的參數列表長度

差異爲什麼會出現這個錯誤,我的代碼看起來它應該是怎樣呢?對不起,如果這是一個愚蠢的問題,但我是全新的java

+2

作爲一個附註,Java約定是用於局部變量和實例字段以小寫字母開頭, 'Link'和'Lang'應該是'link'和'lang'。只有類名稱以大寫字母開頭。 – Radiodef

+0

您的縮進發生了什麼?想必它不應該看起來像那樣? – khelwood

回答

4

這實際上是一個非常簡單的修復。您必須在您的WebStore課程中包含super()電話。我建議你改變你的WebStore構造函數是這樣的:

public WebStore(String name, String Link, String Lang) { 
    super(name); 
    this.Link = Link; 
    this.Lang= Lang; 
} 

這在Java中完成,因爲如果擴展具有構造函數的類,你必須調用super()將其與需要的參數。

1

擴展Store時,需要調用Store構造函數,在這種情況下需要提供商店名稱。

在java中,你可以調用超類使用超(),

public WebStore(String name, String Link, String Lang) 
{ 
    super(name); 
    this.Link = Link; 
    this.Lang= Lang; 
} 
-1

在Java構造函數總是調用它的父類的構造。 無參數構造函數通常被稱爲「默認構造函數」。

您的Store類只有一個構造函數,它有一個補綴:name。 因此,您的WebStore構造函數應該調用其父構造函數,爲name提供值。類似這樣的:

public WebStore(String Link, String Lang) 
{ 
    super("name"); 
    this.Link = Link; 
    this.Lang= Lang; 
} 
+1

只需添加一個'name'參數和'super()',而不是提供默認值。 –

2

您的WebStore必須有一個名稱。所以當你構建它時,你必須傳遞一個名字:public WebStore(String Link, String Lang, String name)

然後,您可以使用您的name參數來調用父類的構造函數:super(name);。請注意,這必須是構造函數的第一條語句。

想象一下,如果建造一座更大的建築物:您的Store代表了基礎,WebStore是一個完整的房子。通過調用super(...);,確保您的對象的「骨架」已經建好。

最後,你必須:

public WebStore(String Link, String Lang, String name) 
{ 
    super(name); // construct the skeleton with this parameter! 
    this.Link = Link; 
    this.Lang= Lang; 
} 

在一個側面說明,你應該考慮以下的常規的Java符號:變量名稱應該以小寫字母開頭。