これは不可能だと感じていますが、そうでない場合は非常に便利です。
子クラスが新しいメソッドのみを持ち、新しいコンストラクターも新しいフィールドも持たないように、親クラスを拡張しようとしています。したがって、子クラスの基礎となるデータ構造は親クラスと同じです。これは、組み込みの Java クラス (例: ) に追加機能を与えたい場合に発生する傾向がありますVector3d
。基になるデータが同一であれば、親クラスとして初期化されたオブジェクトを子クラスにダウンキャストして、追加された機能を使用することができます。私が意味することの例として、以下を参照してください
import javax.vecmath.Vector3d;
public class Vector3dPlus extends Vector3d{
//same fields, same constructors as Vector3d
public double extraMethod(){
return x+y+z;
}
}
Vector3dに追加された新しいメソッドを使用してみてください
import javax.vecmath.Vector3d;
public class Test {
public static void main(String[] args) {
Vector3d basic=new Vector3d(1,2,3);
useExtraMethod(basic); //this line correctly raises an exception, but is there a way around that
}
public static void useExtraMethod(Vector3dPlus plus){
System.out.println(plus.extraMethod());
}
}
通常、Vector3dPlus
メソッドがすべてのVector3d
. しかし、とにかく、基になるデータ構造が同じであるため、すべてVector3d
から Vector3dPlus
.
私がこれに対処する現在の方法は、すべての余分なメソッドを一般的なユーティリティ クラスに入れることですが、それは明らかに少し恐ろしいことです。