Есть несколько вариантов, которые вы могли бы сделать, но у меня было бы что-то вроде
class Product
{
private Category category;
// ...
}
class Category
{
private Category parent;
private String name;
public Category getParent() { return parent; }
public boolean isTopLevelCategory() { return parent == null }
public String getName() { return name; }
public String getFullName() {
if(isTopLevelCategory())
return name;
else
return parent.getFullName() + " -> " + name;
}
// ....
}
Продукт знает свою категорию (самый специфический уровень - поэтому Ferrari находится в «Спорт»)
Категории знают своих родителей, поэтому «Спорт» указывает на «Автомобили», «Автомобили» указывает на «Транспортные средства», «Транспортные средства» указывает на ноль, поскольку это категория верхнего уровня.
Это также отобразиточень хорошо подходит для базы данных SQL, если вам нужно хранить ее таким образом.
Вам все равно придется решить, как сохранить список всех доступных категорий.
Кроме того, если вам нужночтобы иметь возможность перейти из категории верхнего уровня ко всем своим детям, вам, вероятно, захочется сохранить и эти обратные ссылки.