#java #oop #generics
Вопрос:
У меня есть объект с именем Orders. В этом объекте у меня есть два параметра: Транспортное средство и Клиент. Прямо сейчас у меня есть метод под названием showOrder. Этот метод выведет тип транспортного средства и имя клиента.
public void showOrder() { System.out.println("-------------------------------------------------------|Order Placed|-------------------------------------------------------"); System.out.println("The order for the car type " vehicle.getType() " it was place on the name " customer.getName() " in date of " date); System.out.println("----------------------------------------------------------------------------------------------------------------------------"); }
Допустим, в будущем я добавлю в заказ объекта новое строительное имущество. Как я могу изменить этот метод сейчас, чтобы в будущем, когда я добавлю новое свойство, его можно было использовать для отображения как зданий, так и типов транспортных средств? Оба они будут реализовывать интерфейс, доступный для аренды. Идея в том, что я хочу сделать этот код настолько универсальным и независимым, насколько это возможно…
Надеюсь, я выразился достаточно ясно. Спасибо,
Комментарии:
1. Как выглядит ваш
Rentable
интерфейс? Как выглядят остальные члены вашегоOrders
класса?2. Если у вас есть некоторые заказы, которые являются транспортными средствами, а другие-зданиями, вы можете использовать полиморфизм для определения абстрактора суперкласса и двух подклассов VehicleOrder и BuildingOrder. Суперкласс может определять и вызывать абстрактные методы, такие как showOrder () или getDisplayName(). ОТО, если в одном заказе может быть как транспортное средство, так и здание, то вам нужен только один класс.
Ответ №1:
Если я вас правильно понял, вы хотите иметь возможность помещать объект как Vehicle
типа, так и Building
типа в переменную vehicle
. Для этого вы можете использовать абстрактный суперкласс, от которого унаследуют как класс транспортного средства, так и класс здания. Это может выглядеть примерно так:
public abstract class AbstractClass { public abstract String getType(); }
Класс транспортного средства:
public class Vehicle extends AbstractClass { String type; public String getType() { return type; } }
Класс здания тогда выглядит очень похоже:
public class Building extends AbstractClass { String type; public String getType() { return type; } }
Теперь в Order
классе вам нужно изменить тип переменной vehicle
на AbstractClass
. С помощью этого вы можете поместить объект как Vehicle
класса, так и Building
класса в эту переменную. Код в вашем showOrder
методе в основном остается таким же, как у обоих классов, которые вы могли бы поместить в vehicle
объект, есть метод getType
.