我在课堂上有两种方法......
public void method(String var1, String var2, Object var3) {
//do stuff
}
public void method(String var1, String var2, Object[] var3) {
//do stuff
}
当我进行以下调用时... obj.method("string", "string", obj)
调用正确的方法,但是,当我尝试调用obj.method("string", "string", obj[])
时,调用该方法的第一个版本。
我可以给出任何注释或“提示”以确保我预期被调用的方法会被调用吗?我知道Object[]
是Object
,但我希望在运行时Object[]
之前调用Object
的方法。
答案 0 :(得分:8)
不,对我来说,这会按预期调用第二种方法!
如果你想让一个人被调用,那么你给出的提示通常是对方法所期望的确切参数类型的强制转换(这个强制转换甚至可以在null
上工作。因此,使用(Object)arr
将强制调用第一个方法,但默认情况下它肯定会调用第二个方法(无论如何都在JVM的所有正确版本上) - 与流行的看法相反,这种情况在JLS中明确涵盖因此并不含糊。)
答案 1 :(得分:0)
在Java中,方法重载发生在编译期间。这意味着在程序编译期间决定调用哪个方法。请注意,这与方法覆盖不同。