2014-10-07 74 views
2

在我的子類中我有這樣的:使用屬性在超類

protected String[] columns = {"column1", "column2"}; 

雖然我的父類中我有一個會存儲這些HashMap中的方法。

public HashMap<Integer, String> getColumns() { 
    HashMap<Integer, String> columnsMap = new HashMap<>(); 
    for (int i = 0; i < this.columns.length; i++) { 
     columnsMap.put(i + 1, this.columns[i]); 
    } 
    return columnsMap; 
} 

但是,看起來,我不能簡單地使用String[] columns屬性在我的子類。 我將如何做到這一點?

+0

我相信你的選擇是使用單例,或者多例,或使其成爲抽象方法返回父對象中的String [],並返回子對象的String []。 – 2014-10-07 16:15:33

+0

如果您將Super類作爲Abstract,您將如何訪問此結果(來自子類的值)。你如何調用getColumns()方法。只是想知道這可能有用的場景。 (假設你正在接受接受的答案) – Suvasis 2014-10-07 17:39:39

回答

0

創建一個抽象方法,它將檢索包含列名稱的String數組,然後在您的子類中定義它。

在父:

protected abstract String[] getColumnNames(); 

public HashMap<Integer, String> getColumns() { 
    HashMap<Integer, String> columnsMap = new HashMap<>(); 
    String[] columns = this.getColumnNames(); 
    for (int i = 0; i < columns.length; i++) { 
     columnsMap.put(i + 1, columns[i]); 
    } 
return columnsMap; 

}

在孩子:

protected String getColumnNames() 
{ 
    return new String[] {"column1", "column2"}; 
} 
+0

添加一些解釋並刪除重複的簽名'getColumns()',那麼它值得+1 :-) – dognose 2014-10-07 16:28:29

0

假設您嘗試訪問父類中方法的子類中定義的String[],您可以通過類似getColumnNames()的方法訪問它。子類需要重寫此方法並返回定義爲變量的String[]

請注意,不像方法重寫聲明在子類中具有相同名稱的另一個字段不等於重寫。超類變量值保持不變,子類字段變成另一個字段。字段永遠不會被覆蓋,只有方法被覆蓋。

+0

但是,如果我在我的父項中實現** public abstract String [] getColumns(); **,我必須重命名我當前的** getColumns()**方法,對吧? – guidsen 2014-10-07 16:20:17

+0

是的,我在你編輯它之前實現了getColumnNames()抽象方法。感謝壽! – guidsen 2014-10-07 16:24:18

+0

我編輯了我的答案,想法是有一個方法返回String [],你可以稱它爲'getColumnNames()'父類可以調用這個方法。 – 2014-10-07 16:24:24