【发布时间】:2020-05-21 14:24:01
【问题描述】:
我有一个扩展 Product 的 ElectronicProduct 类型的对象,我尝试从子类中调用 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;
}
【问题讨论】:
-
允许重写方法返回更具体的类型(从 Java 5 开始)。我们不知道你之前做了什么,所以我们不能说你做错了什么。
标签: java object inheritance polymorphism