具有不同参数对齐方式的 Java 重载


public void giveInput(String x, int y) {
        System.out.print("X parameters"+x+"Y parameters"+y);
    }
    public void giveInput(int y, String x) {
        System.out.print("x parameters"+x+"Y parameters"+y);
    }

为什么参数对齐在重载中无关紧要。它编译得很好

参数的对齐顺序确实很重要,这就是您编译的原因。它编译是因为没有歧义,giveInput("", 0)giveInput(0, "")明显不同。他们完全可以做完全不同的事情。

Java所关心的只是方法的签名唯一地标识它。签名(用于重载)是方法名称及其形式参数的类型,按顺序排列。从JLS§8.4.9:

调用方法时 (§15.12) 时,在编译时使用实际参数(以及任何显式类型参数)的数量和参数的编译时类型来确定将调用的方法的签名 (§15.12.2)。

值得注意的是,形式参数的名称并不重要giveInput(String x, int y)会与giveInput(String foo, int bar)冲突,因为名称无关紧要,重要的是顺序和类型。

这是两种具有不同签名的不同方法。方法中参数类型的顺序是 Java 中方法签名的一部分。另一方面,参数的名称并不重要。

由于参数名称无关紧要,因此您的代码等效于:

public void giveInput(String x, int y) {
    System.out.print("X parameters"+x+"Y parameters"+y);
}
public void giveInput(int a, String b) {
    System.out.print("x parameters"+b+"Y parameters"+a);
}

另一方面,这两种方法具有相同的签名,因此会导致编译错误:

public void giveInput(String x, int y) {
    System.out.print("X parameters"+x+"Y parameters"+y);
}
public void giveInput(String a, int b) {
    System.out.print("x parameters"+b+"Y parameters"+a);
}

最新更新