是你错了,重载不能用返回值来做判断void f(){}
int f(){
return 1;
}
这2个方法编译器会认为是同一个方法。
不能用返回值来重载,因为方法的调用者不一定会关心方法的返回值...
int f(){
return 1;
}
这2个方法编译器会认为是同一个方法。
不能用返回值来重载,因为方法的调用者不一定会关心方法的返回值...
解决方案 »
- java list排序问题
- 请好心人做一下这两道题,我没看明白题是啥意思?里面有些明词不理解?
- 关于异常的一道题
- 添加焦点事件
- 鼠标右击的问题
- 我安装完tomcat 输入http://locallhost:8080为什么出现了windows的登陆窗口,让我输入用户名和密码?
- 如何把myeclipse里死循环程序退了
- 2000RMB每月的JAVA程序员要什么样的要求?
- tomcat 能设置 form 的提交编码吗?
- 小问题:在线程中调用sleep()使其睡眠的时候,此线程是否释放所占的资源?
- 可变参数列表,重载函数的区别和理解
- 关于netbeans写JAVA构建后单独运行.jar文件出现JDBC的连接错误的问题
分?比如对下面这两个方法来说,虽然它们有同样的名字和自变量,但其实是很容易区分的:
void f() {}
int f() {}
若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而,
我们也可能调用一个方法,同时忽略返回值;我们通常把这称为“为它的副作用去调用一个方法”,因为我
们关心的不是返回值,而是方法调用的其他效果。所以假如我们象下面这样调用方法:
f();
Java 怎样判断f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能
根据返回值类型来区分过载的方法。
楼主 这下你知道了吧
但是参数列表不同,比如参数的顺序,类型,个数等 (就是括号里的东西)
方法重载跟返回值类型和修饰符无关
那么在执行时,你传给方法哪些参数,java虚拟机就会去找对应的方法执行(所以不用担心混乱)
public class TestOveride{
public void test1(){
System.out.println("无参数test1");
}
public void test1(String s){
System.out.println("有参数test1");
}
public static void main(String[] args){
TestOveride t = new TestOveride();
t.test1("hello"); //你看,假如我不要返回值,你说用返回值来看,我都没有返回值。你说是调用哪一个方法?所以要看参数。
}
}
/*
public static void f() {
System.out.println("f()");
}
//compile error: 已在类中定义了方法f()
public static int f() {
return 1;
}
*/ public static int add(int x, int y) {
return x + y;
}
public static String add(String str1, String str2) {
return str1 + str2;
} public static void main(String [] args) { String c = add("a", "b");
System.out.println(c);
int x = add(1,1);
System.out.println(x);
}}这里个人认为应该理解为:不能单单依靠返回值类型来区分方法重载。