2016-05-02 2 views
0

У меня есть класс Item и 2 класса, который расширяет этот класс с именем CountableItem и UncountableItem.Java Inheritance

CountableItem имеет одну переменную экземпляра с именем quantity и UncountableItem класс имеет одну переменную экземпляра с именем weight.

ихние Конструкторы как

public CountableItem(int id, String name, double unitPrice, Date experitionDate,int quantity) { 
super(id, name, unitPrice, experitionDate); 
setQuantity(quantity); 
} 

и

public UncountableItem(int id, String name, double unitPrice, Date experitionDate,double weight) { 
super(id, name, unitPrice, experitionDate); 
setWeight(weight); 
} 

И в другом классе я держу элементы в качестве ArrayList

private ArrayList<Item> storeList = new ArrayList<>(); 

В главных пользователей класса входит сколько и сколько он хочет купить. Но я не могу изменить количество или вес, потому что мой аррайалист держит предметы. Пожалуйста, помогите :(

+1

Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) – MikeCAT

+0

Я не понимаю ваш вопрос/что вы пытаетесь выполнить –

+1

Трудно понять, что вы просите, но вы должны иметь возможность проверить 'if (item instanceof UncountableItem)'. –

ответ

0

Вы можете использовать InstanceOf оператора, чтобы выяснить, какой вид товара у вас есть. Но это не большой ООД.

Альтернативой является немного сложнее, потому что вы хотите установить двойной в одном case и int в другом. Но в веб-сценарии я предполагаю, что вы получаете значение как String. Таким образом, элемент можно сделать абстрактным и иметь абстрактный setCountOrWeight (String s). И тогда подклассы оба переопределили бы его с их собственными методами setCountOrWeight (String s), которые будут знать, как анализировать и устанавливать правильный тип данных.