У меня есть объект типа ElectronicProduct, который расширяет Product, я пытаюсь вызвать метод loadFromFile() из дочернего класса, указав точное имя и типы аргументов, но вместо этого объект дочернего класса вызывает loadFromFile() из родительского класса. Как мне остановить это?
Код выглядит следующим образом:
ElectronicProduct eProduct = new ElectronicProduct();
eProduct.loadFromFile(eProduct,bin);
однако он вызывает метод в родительском классе ниже:
public Product loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
//some code
}
вместо дочернего класса, показанного ниже:
public ElectronicProduct loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
// Some code
}
Я пытался использовать @Override в методе дочернего класса, но поскольку один возвращает продукт, а другой возвращает электронный продукт, переопределение, похоже, не работает. Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ
Это очень странно, так как теперь он начал работать так, как я хотел, ничего не меняя. Другой сценарий, но подобное случалось раньше, когда выдается предупреждение об ошибке, я удаляю код и пишу то же самое, и тогда это работает. Я не хочу, чтобы это произошло случайно, поскольку это оцениваемое задание. Не хочу уходить от темы, но это должно быть связано. Пожалуйста, сообщите, если кто-нибудь знает, что только что произошло?
РЕДАКТИРОВАТЬ*2
В ответ на комментарий от Tiffado, причина, по которой передается объект Product, а не объект ElectronicProduct, заключается в том, что в методе дочернего класса объект Product передается родительскому классу. Если вместо этого я передам объект дочернего класса в дочерний метод, который затем передаст объект родительскому методу, он может не сработать, поскольку я узнал, что родительские классы не «видят» дочерние классы. Пожалуйста, поправьте меня, если это неправильно.
public ElectronicProduct loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
ElectronicProduct eProduct = new ElectronicProduct();
eProduct = (ElectronicProduct)super.loadFromFile(aProduct,bin);
eProduct.setGuarunteeDuration(Integer.valueOf(bin.readLine()));
return eProduct;
}