Вы не хотите проверять класс объекта, прежде чем что-то делать с ним в вашем случае. Вы должны использовать полиморфизм . Вы хотите, чтобы интерфейс определял некоторые методы. Каждый класс реализует эти методы. Обращайтесь к объекту по его интерфейсу, и отдельные реализации этих объектов возвращают свои значения вызывающей стороне.
Если вы опишете еще несколько объектов, которые, по вашему мнению, вам нужны, у людей здесь будет мнение о том, как вы должны их расположить. Но из того, что вы предоставили, вы можете захотеть создать интерфейс «Building», который определяет некоторые общие методы. Вам также может потребоваться интерфейс «UsableItem» или что-то более общее. Больница может быть классом, который реализует строительство. ReceptionDesk может реализовать UsableItem. В здании может быть сетка UsableItem.
Если rotate () был общим методом для всей мебели, которая фактически выполнила некоторую работу, вы можете рассмотреть возможность создания класса AbstractUsableItem, который был бы абстрактным классом, реализующим UsableItemand, предоставляющим метод rotate (). Если бы rotate был разным в каждом реализующем классе, у вас был бы этот метод в интерфейсе, но каждый класс, как ReceptionDesk, делал бы свое дело с методом rotate (). Ваш код будет делать что-то вроде:
UsableItem desk = new ReceptionDesk();
desk.rotate()
В вашем примере, если ваш щелчок мыши по экрану повернул объект под ним, и вам действительно нужно было проверить, можно ли повернуть объект, прежде чем делать что-то подобное, вы должны сделать
if (clickedObject instanceOf UsableItem) {
((UsableItem) clickedObject).rotate();
}
где UsableItem был интерфейсом или абстрактным классом. Некоторые люди считают, что весь дизайн должен быть выполнен через интерфейсный контракт и предлагают интерфейс для каждого типа класса, но я не знаю, нужно ли вам заходить так далеко.