我有一个实现接口的抽象超类:
public abstract class FooMatrix implements Matrix {
public Vector multiply(Vector vec) {
// Code for Matrix * Vector
}
}
public interface Matrix {
public Vector multiply(Vector vec);
}
然后我有一个子类,它扩展了超类并实现了第二个接口,该接口表示第一个接口表示的数学类的数学子类:
public interface Vector {
// Methods
}
public class FooVector extends FooMatrix implements Vector {
@Override
public Matrix multiply(Vector rightVec) {
// Code for Vector * Vector
}
}
所以子类返回抽象超类的返回类型的超类。这不起作用,我想知道如何使它起作用。
在数学中,向量是矩阵的子类。一般来说,一个矩阵乘以一个矩阵会产生另一个矩阵。如果第二个矩阵是向量,则结果是向量。如果两个矩阵都是向量,则结果分别是列向量乘以行向量或行向量乘以列向量的矩阵或标量。这假设尺寸是兼容的。
我想以一种尊重数学的方式用 Java 类来表示这种行为,并尽可能给出最具体的返回类型。换句话说,我想要fooMatrix.multiply(Vector vec)
返回,而Vector
不仅仅是_ _ _作为标量返回。Matrix
fooVector.multiply(Vector rightVec)
Matrix
Vector
Matrix
Vector
inner
multiply(Vector rightVec)
Matrix
我发现了有关协变返回类型的问题,但没有这样的问题。
谢谢!