在Java中使用不同的返回types重载?
为什么只通过改变返回types来重载一个函数是不可能的? 在未来的Java版本中会有所改变吗?
顺便说一句,仅供参考,这是可能的C ++?
你不能用Java来完成,而你不能用C ++来完成。 理由是编译器仅凭返回值不足以确定要调用哪个函数:
public int foo() {...} public float foo() {..} ... foo(); // which one?
原因是Java中的重载只允许具有不同签名的方法。
返回types不是方法签名的一部分,因此不能用于区分重载。
请参阅Java教程中的定义方法 。
在Java 5.0之前,当您重写一个方法时,参数和返回types必须完全匹配。 在Java 5.0中,它引入了一个称为协变返回types的新工具。 您可以重写具有相同签名的方法,但会返回返回对象的子类。 换句话说,子类中的方法可以返回一个对象,该对象的types是超类中具有相同签名的方法返回的types的子类。
在java中Overloaded
方法可能有不同的返回types,因为参数列表也不同。
编译器在区分方法时不考虑返回types,所以即使它们具有不同的返回types,也不能声明具有相同签名的两个方法。
返回types在重载方法时无关紧要。 我们只需要确保没有歧义!
Java可以知道调用哪个方法的唯一方法是通过区分参数列表的types。 如果编译器允许两个具有相同名称和相同参数types的方法,那么将无法确定应该调用哪一个方法。
编译器在区分方法时不考虑返回types,所以即使它们具有不同的返回types,也不能声明具有相同签名的两个方法。
如果你意识到函数的执行,那么你将会意识到,当我们调用一个函数的时候,定义部分就会执行,最后我们需要返回语句,所以我们可以说返回是在函数的整个定义之后,这就是为什么如果有两个更多的function相同的名称和相同的types和没有。 然后在调用编译器将知道哪个被调用的时候,因为函数名和参数是相同的。 在调用的时候,所有的重点都是参数和函数名,函数定义完成后我们处理返回语句。
编译时间错误比运行时错误好。 所以,如果您声明具有相同参数的相同方法,java编译器会渲染编译器时间错误。
没有不可能的那样,你只能通过参数的参数或数据types来重载