これを実現するためにジェネリックを使用できます。
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
ここでは、例としてandのキーと値の型を使用し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>());
}
...
}
いくつかの補足事項:
フィールドを作成した場合は、特にアクセサーがあるため、カプセル化の方が適しています。また、再割り当てが予定されていない場合は、作成することを検討してください。results
private
getResults()
final
また、具体的にではなく、パブリック宣言で型を使用してインターフェイスするようにプログラミングすることをお勧めします。インスタンス化されたときにのみ、実装タイプ (この場合) を参照します。Map
HashMap
HashMap
class Child<K, V> extends Parent<Map<K, V>> {
Child() {
super(new HashMap<K, V>());
}
...
}