使用超级中的孩子的财产

时间:2014-10-07 16:11:53

标签: java arrays oop

在我的孩子课上,我得到了类似的东西:

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属性。 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

假设您尝试从父类中的方法访问子类中定义的String[],您可以通过getColumnNames()之类的方法访问它。子类需要覆盖此方法并返回定义为变量的String[]

请注意,与方法重写不同,在子类中声明另一个具有相同名称的字段并不等于覆盖。超类变量值保持不变,子类字段变为另一个字段。字段永远不会被覆盖只有方法被覆盖。

答案 1 :(得分: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"};
}