在java中重载方法的理解

时间:2018-02-14 09:51:28

标签: java

如果我有这个:

class MyClass {
    double calcAverage(double marks1, int marks2) {
        return (marks1 + marks2)/2.0;
    }
    double calcAverage(int marks1, double marks2) {
        return (marks1 + marks2)/2.0;
    }
    public static void main(String args[]) {
        MyClass myClass = new MyClass();
        myClass.calcAverage(2, 3);
    }
}

编译器无法确定应调用哪个重载方法“calcAverage”。我理解这一点。所以我正在探索一些例子,看看我是否完全理解这个想法。我来到这个例子,我很困惑:

public class MyClass {
 double metoda(int marks1, double marks2){
    System.out.println("int + double");
    return (marks1 + marks2)/2.;
}

double metoda(char marks1, double marks2){
    System.out.println("char + double");
    return (marks1 + marks2)/2.;
}

double metoda(char marks1, int marks2){
    System.out.println("char + int");
    return (marks1 + marks2)/2.;
}

public static void main(String args[]) {
    MyClass ss = new MyClass();
    char a = 2;
    char b = 3;
    double var = ss.metoda(a, b);
}
}

这三种方法都可以接受“char,char”参数,但仍然没有编译错误。如果我运行此程序,则执行metoda(char ..,int ..)。如果我删除此方法并再次执行程序,则调用metoda(char ..,double ..)。我不明白为什么这不是编译错误,编译器如何知道调用哪个方法。

0 个答案:

没有答案
相关问题