gpt4 book ai didi

java - Java中重载函数的合法调用和判定

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:54 24 4
gpt4 key购买 nike

我在暑假自学,遇到了这个我不确定的问题,我想知道是否有人可以提供帮助。我不确定最后一个数字,但如果有人也愿意检查的话,我会包含我之前的答案。这不是任何类(class)的家庭作业,我只是想确保在继续之前了解我在做什么。

我正在考虑以下定义:

1. void m (Object o, long x, long y)
2. void m (String s, int x, long y)
3. void m (Object o, int x, long y)
4. void m (String s, long x, int y)

这些声明:

Object o;
String v;
int a;
long b;

我正在检查这些调用:

m(v,a,b); Calls 2, because it is the most specific.
m(v,a,a); Not legal, because 2 and 4 could both be called (not specific enough).
m(v,b,a); Calls 4, because it is the most specific.
m(v,b,b); Calls 1, because it is the only one that will fit (long cannot shorten to int).
m(o,b,b); Calls 1, similar reasoning as above answer.
m(o,a,a); Unsure. I'm not sure of the precedence.

提前致谢!

最佳答案

这又是一个“最具体”的简单案例。选择选项 3 的原因与您的第二个电话是非法的相同。 m(v,a,a) 无法在 m(String,long,int)m(String,int,long) 之间进行选择> 因为它们同样具体。每个都需要对其中一个参数进行一次扩展转换。另一方面,m(o,a,a) 可以在 m(Object,long,long)m(Object,int,long )。其中之一需要两次扩大转换。另一个只需要一个,使其最具体。

关于java - Java中重载函数的合法调用和判定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778800/

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