java自动函数调用

标签 java

我有一个数学类,它在 n 数组列表中存储表达式的表示 我目前有三个类 AdditionArray MultipleArray 和 Variable 它们都实现了我的 Number 接口(interface)。

public interface Number {

  public Number Multiply(Number number);

在实现 Number 的类中,我有重载操作,例如 Multiply

public class MultipleArray extends ArrayList<Number> implements Number{
  public Number Multiply(AdditionArray number);
  public Number Multiply(Number number){throw new Exception("woops");}

问题是 java 不会在运行时自动调用正确的重载函数。似乎要在编译时弄清楚

例如

Number someNumber = new MultipleArray();
Number someOtherNumber = new AdditonArray();

MultipleArray result2 = someNumber.Multiply(someOtherNumber); //calls the correct function

Number result2 = someNumber.Multiply(someOtherNumber); // throws the woops exception

java为什么要这样做。还有另一种方法可以实现吗?例如某种工厂?

干杯, 标记

最佳答案

在 Java 中,重载 是一种编译时多态性,而覆盖 是一种运行时多态性。参见 What is the difference between method overriding and method overloading in Java? .

这意味着编译器将始终在编译时确定调用两个重载方法中的哪一个,而不是可以动态分派(dispatch)到基于调用该方法的类的运行时类型。

关于java自动函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231586/

相关文章:

java - CELL_TYPE_ERROR 有什么用?

java - 如何识别socket数据的类型?

java - 如何实现带有超时的 Runnable?

java - 如何避免在 Java 中重复 for 循环?

java - 发现需要灵感时出错 : certificate_unknown and SSLHandshakeException on Payara

java - Spring Boot安全请求方法 'POST'不支持

java - 'do while' 循环的更多问题,Java

java - 求斐波那契数列中小于或等于该数字的所有数字之和

java - Selenium WebDriver 测试后无法关闭 Firefox 窗口 (Java)

java - Powermock 私有(private) stub 错误