尽管子类中也有相同的方法,但如何从父类停止子类对象的调用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尽管子类中也有相同的方法,但如何从父类停止子类对象的调用方法相关的知识,希望对你有一定的参考价值。

我有一个类型为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,但是因为一个返回产品,而另一个返回electronicProduct,所以覆盖似乎不起作用。任何帮助将不胜感激。

编辑

这很奇怪,因为它现在可以按照我的要求开始工作,而无需进行任何更改。在给出错误警告之前,发生了不同的情况,但发生了类似的事情,我删除了代码并编写了完全相同的事情,然后它起作用了。我不希望这是随机发生的,因为这是分级作业。不想超出主题,但必须相关。请告知是否有人知道发生了什么事?

答案
编译器无法知道两种方法之间的区别:您需要在方法签名,参数数量上指定不同的参数顺序,但没有任何子类参数类型或子类返回类型会有所不同:

方法:

public Product loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{

与...相同

public ElectronicProduct loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{

因为返回类型(ElectronicProduct)是Product的子类,所以使用多态性不是方法签名的一部分。
另一答案
也许您应该使用像这样的方法:

public ElectronicProduct loadFromFile(ElectronicProduct aProduct, BufferedReader bin) throws IOException, ParseException{

以上是关于尽管子类中也有相同的方法,但如何从父类停止子类对象的调用方法的主要内容,如果未能解决你的问题,请参考以下文章

Java 继承

从父类对象调用子类方法

子类从父类继承过来的方法可以操作子类自己定义的成员变量吗

C#的扩展方法解析

面向对象—继承

java面向对象