我有一种感觉,这是不可能的,但如果不是,它会非常有用。
我试图以子类只有新方法,没有新构造函数,没有新字段的方式扩展父类。所以子类的底层数据结构和父类是一样的。当我想为内置的 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());
}
}
显然,java 对此感到不安,因为通常我们不能保证Vector3dPlus
方法适用于 all Vector3d
。但是,无论如何我可以对 java 说底层数据结构是相同的,因此允许所有从 all 向下转换Vector3d
为 Vector3dPlus
.
我目前处理这个问题的方法是将所有额外的方法放在通用实用程序类中,但这显然有点可怕