如果我有这个:
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 ..)。我不明白为什么这不是编译错误,编译器如何知道调用哪个方法。