gpt4 book ai didi

java自动函数调用

转载 作者:行者123 更新时间:2023-11-29 04:02:57 26 4
gpt4 key购买 nike

我有一个数学类,它在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com