您可以使用泛型来实现这一点:
class Parent<T> {
protected T results;
public T getResults() {
return results;
}
}
class Child extends Parent<HashMap<String, Integer>> {
public void operation() {
HashMap<String, Integer> map = getResults();
...
}
}
String
这里我使用了和的键值类型Integer
作为例子。Child
如果键和值类型不同,您也可以对其进行通用化:
class Child<K, V> extends Parent<HashMap<K, V>> { ... }
如果您想知道如何初始化results
字段,可以在构造函数中进行,例如:
class Parent<T> {
protected T results;
Parent(T results) {
this.results = results;
}
...
}
class Child<K, V> extends Parent<HashMap<K, V>> {
Child() {
super(new HashMap<K, V>());
}
...
}
一些旁注:
如果您制作了field ,那么封装会更好,特别是因为它无论如何都有访问器。另外,如果它不会被重新分配,请考虑制作它。results
private
getResults()
final
另外,我建议通过使用公共声明中的类型而不是专门来编程接口。仅在实例化时引用实现类型(在这种情况下):Map
HashMap
HashMap
class Child<K, V> extends Parent<Map<K, V>> {
Child() {
super(new HashMap<K, V>());
}
...
}