У меня есть объект типа 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 в методе дочернего класса, но поскольку один возвращает продукт, а другой возвращает электронный продукт, переопределение, похоже, не работает. Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ
Это очень странно, поскольку теперь он начал работать так, как я хотел, без каких-либо изменений. Другой сценарий, но похожая вещь произошла раньше, когда он выдает предупреждение об ошибке, я удаляю код и пишу ту же самую вещь, и тогда это работает. Я не хочу, чтобы это происходило случайным образом, так как это дифференцированное задание. Не хотите go отключить topi c, но это должно быть связано. Посоветуйте, пожалуйста, если кто-нибудь знает, что только что произошло?
EDIT * 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;
}