2017-01-12 21 views
1

我想擴展Button類來創建一個類稱爲「LabeledButton」,將有也String屬性,叫做label擴展Button類來創建一個單身

這是迄今爲止在那裏我得到:

static public class LabeledButton extends Button { 
    String label; 

    private LabeledButton(String label) { 
     this.label = label; 
    } 

    static public LabeledButton getInstance(String label) { 
     if(current == null) 
      current = new LabeledButton(label); 
     return current; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 
} 

但是,這是錯誤我在構造函數中得到:

有一個在「android.widget.Button」

沒有可用的默認構造函數

我在做什麼錯?

回答

2

就像錯誤說你需要添加Button class的默認構造函數,請嘗試將您的構造函數更改爲以下內容。

public class LabeledButton extends Button { 
    String label; 

    public LabeledButton(Context context, String label) { 
     super(context); 
     this.label = label; 
    } 

    static public LabeledButton getInstance(Context context, String label) { 
     if(current == null) 
      current = new LabeledButton(context, label); 
     return current; 
    } 
} 
+0

感謝您的回答,但getInstance()'怎麼樣?我應該在參數中添加哪些上下文? – Robb1

+1

更新爲包含getInstance() – Isaac

4

默認構造是不帶任何參數的構造,並通過的情況下,沒有其他的構造中提到 Java編譯器隱含介紹。

每當您擴展任何給定的類時,創建對象時首先調用父類構造函數。在Parent類不提供無參數構造函數的情況下您將不得不明確告訴要調用哪個參數化類。

既然你伸長按鈕,這恰好不是有默認的(無參數)構造函數在當前的情況下錯誤

There is no default constructor available in 'android.widget.Button' 

如前所述。

Button(Context context) 
Button(Context context, AttributeSet attrs) 
Button(Context context, AttributeSet attrs, int defStyleAttr) 
Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 

是唯一暴露的。 Android Button Documentation

所以你必須明確地調用其中一個參數化的構造函數。

public class LabeledButton extends Button { 
    String label; 

    public LabeledButton(Context context, String label) { 
     super(context); // Explicitly Invoking the parent parameterized constructor 
     this.label = label; 
    } 
}