Просто чтобы начать с терминологии. class - это план, который сообщает вам, как выглядит экземпляр объекта - в момент написания new Figure()
вы создали экземпляр, объект из класс Figure
(часто у вас есть несколько объектов одного класса ). Поэтому, когда вы «привязываете» выше, вы на самом деле не связываете классы, вы связываете объекты .
Приведенный выше код в порядке. По соглашению, вы часто пишете такие вещи с помощью setters , их не обязательно называть так, но очень распространенный шаблон:
public class Terrain {
Figure fig
public void setFigure(Figure fig) {
this.fig = fig;
}
}
public class Figure {
Terrain ter
public void setTerrain(Terrain ter) {
this.ter = ter;
}
}
Чтобы связать их вместе, вы должны были бы это делать в своем основном классе, что, как вы видите, в значительной степени точно то, что вы уже сделали бы, просто используя обычные имена.
public void init() {
Terrain ter = new Terrain(); // create object of class Terrain
Figure fig = new Figure(); // create object of class Figure
ter.setFigure(fig);
fig.setTerrain(ter);
}
Например, если между двумя объектами существует связь, вы не можете создать фигуру, не имея ландшафта, в который ее поместите. Это сделало бы ландшафт почти "собственной" фигурой. Вы можете указать это, используя конструктор на рисунке.
public class Figure {
Terrain ter
// constructor requires an instance of Terrain,
// since the figure must always be placed in a terrain
public Figure(Terrain ter) {
this.ter = ter;
// let terrain know this is the main figure.
ter.setFigure(this);
}
}
Теперь ваш код инициализации будет выглядеть так:
public void init() {
Terrain ter = new Terrain(); // create object of class Terrain
Figure fig = new Figure(ter); // create object of class Figure in the terrain
// no setters needed, since figure constructor sets up
// the relationship.
}