2014-10-07 130 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