We can do something like that:
```java
abstract class Shape<V extends Vector<V>, T extends Shape<V, T> {
abstract void translate(V vector);
abstract boolean contains(V point);
abstract void setPosition(V position);
abstract V getPosition(V vector);
// ...
}
```
```java
class Shape2D<T extends Shape<Vector2, T>> extends Shape<Vector2, T> {
public float x, y;
void setPosition(float x, float y) { this.x = x; this.y = y; }
void setPosition(Vector2 point) { setPosition(point.x, point.y); }
// and so on
}
```
```java
class Shape3D<T extends Shape<Vector3, T>> extends Shape<Vector3, T> { 
// same as Shape2D but with z-axis
}
```
and make classes from math.collision extends Shape3D. 
Also maybe i am too picky but i think that all shapes should be in one special package. But it's breaks too much code.