А как насчет того, чтобы сделать его не связанным с Rectangle? Создайте новый автономный модуль Collision и работайте с любыми другими типами.
(я не знаю Java, извините за любые проблемы здесь)
class Collision
{
public boolean BetweenRectangles(Rectangle a, Rectangle b)
{
}
public boolean BetweenCircles(Circle a, Circle b)
{
}
public boolean RectangleToCircle(Rectangle r, Circle c)
{
}
public boolean MyCrazyShapeToRectangle(MyCrazyShape mcs, Rectangle r)
{
}
}
ИМХО, на самом деле не имеет смысла делать столкновение из прямоугольника, потому что столкновение является ортогональным понятием для прямоугольника, и склеивание их вместе без необходимости ограничивает ваши будущие варианты. Главное, что нужно понять, это то, что вам не нужен объект столкновения, по сути, эти функции носят процедурный характер (есть ли в Java что-то вроде «статического» модификатора C ++ для функций-членов области класса?). Само столкновение не является собственностью ни одного из участников столкновения.