一个java重载题,求解

wangtengkl 2010-04-17 07:07:09
.指出下列哪个方法与方法public void add(int a){}为合理的重载方法。

A public int add(int a)

B public void add(long a)

C public void add(int a,int b)

D public void add(float a)

B 为什么不是啊?
...全文
139 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjtttt 2010-04-17
  • 打赏
  • 举报
回复
要说合理,明显是C,第一个改返回类型作为重载并不合理
其他两个都是加大了参数的宽度,但是从方法适用范围来说其他两个都完全包含了原题的方法,所以不合理
C改变了参数列表,需要两个参数,相对比较合理
这题目很莫名其妙
A
public int add(int a) {
a++;
return 0;
}

B
public void add(long a){
a++;
}

C
public void add(int a,int b){
a++;
}

D
public void add(float a){
a++;
}

原题
public void add(int a){
a++;
}

没什么太大的区别,唯一不同的也就是float那个方法内部的a是float如果直接输出结果是带.0的罢了
zhushoujun 2010-04-17
  • 打赏
  • 举报
回复
学习学习
张志备 2010-04-17
  • 打赏
  • 举报
回复

重载方法的定义是:方法名相同,参数类型或者参数个数不同称为方法重载,另外,返回值的异同并不能作为方法重载判断的依据。
综上可见,在方法名相同的前提下,参数类型和参数个数才是决定该方法是否为重载的关键。
所以现在重新来看上面的问题,不难看出,除了A,其实BCD都是原来方法的重载
一己之见,欢迎拍砖。
lonefeifei 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justlearn 的回复:]
引用 2 楼 zfq642773391 的回复:
重载一般不要以返回值来区分,因为这样会造成程序的不稳定和可读性差,所以A不行
区分重载最简单的规则:每个重载的方法都必须有一个独一无二的参数列表,D选项肯定是重载的了
至于B,int 和long虽然是不同的类型,但都是整形,虽不能说不是重载,但如果只选一个,还是D更接近

为什么你不认为c是?我倒觉得后3个都是,要说最合理还是c了
[/Quote]

我也认为是C,嘿嘿
groovy2007 2010-04-17
  • 打赏
  • 举报
回复
b、c、d从语法上讲都是对的。但是c最好。
因为B和D容易引起混乱。
比如
short s=1;
double d=1.5;
add(s); //add(int), add(long), add(float) ?
add(d); //add(int), add(long), add(float) ?
notlogin 2010-04-17
  • 打赏
  • 举报
回复
刚查了下资料,说重载可以改变返回值。
但是没说,“只要返回值改变,就是重载”。所以对于重载方法来说,只改其变返回值,而不改变参数是不行的,编译报错。

以前做项目也不太常用重载,没注意这方面。
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 notlogin 的回复:]
引用 8 楼 zfq642773391 的回复:

引用 6 楼 notlogin 的回复:
A不是重载,参数类型看错了

A是重载,他是以返回值来辨认的,只不过,以返回值来区分重载不是太好,不推荐使用

理论上说是的,但是编译器不会让你通过的,直接报错。
[/Quote]
notlogin 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zfq642773391 的回复:]

引用 6 楼 notlogin 的回复:
A不是重载,参数类型看错了

A是重载,他是以返回值来辨认的,只不过,以返回值来区分重载不是太好,不推荐使用
[/Quote]
理论上说是的,但是编译器不会让你通过的,直接报错。
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 notlogin 的回复:]
A不是重载,参数类型看错了
[/Quote]
A是重载,他是以返回值来辨认的,只不过,以返回值来区分重载不是太好,不推荐使用
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justlearn 的回复:]
引用 2 楼 zfq642773391 的回复:
重载一般不要以返回值来区分,因为这样会造成程序的不稳定和可读性差,所以A不行
区分重载最简单的规则:每个重载的方法都必须有一个独一无二的参数列表,D选项肯定是重载的了
至于B,int 和long虽然是不同的类型,但都是整形,虽不能说不是重载,但如果只选一个,还是D更接近

为什么你不认为c是?我倒觉得后3个都是,要说最合理还是c了
[/Quote]
我错了 应该是c最合理,怎么说呢,这几个选项都是重载,只不过..
这题真艮。。。
notlogin 2010-04-17
  • 打赏
  • 举报
回复
A不是重载,参数类型看错了
qydcx7044862 2010-04-17
  • 打赏
  • 举报
回复
呵呵,primitive可以被自动的从占用较小存贮空间的数据类型转换到较大的,
notlogin 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zfq642773391 的回复:]

重载一般不要以返回值来区分,因为这样会造成程序的不稳定和可读性差,所以A不行
区分重载最简单的规则:每个重载的方法都必须有一个独一无二的参数列表,D选项肯定是重载的了
至于B,int 和long虽然是不同的类型,但都是整形,虽不能说不是重载,但如果只选一个,还是D更接近
[/Quote]
说的非常对

但是这道题考的…………怎么说呢…………“合理的重载方法”,什么叫“合理”?你的“合理”跟我的“合理”是同一个范围吗? ABCD是重载方法肯定没错,问题就在让人蛋疼的“合理”两个字上。。。。。

至于B和原题的方法,只要传递的变量类型正确,程序完全可以正确运行。
justlearn 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zfq642773391 的回复:]
重载一般不要以返回值来区分,因为这样会造成程序的不稳定和可读性差,所以A不行
区分重载最简单的规则:每个重载的方法都必须有一个独一无二的参数列表,D选项肯定是重载的了
至于B,int 和long虽然是不同的类型,但都是整形,虽不能说不是重载,但如果只选一个,还是D更接近
[/Quote]
为什么你不认为c是?我倒觉得后3个都是,要说最合理还是c了
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
重载一般不要以返回值来区分,因为这样会造成程序的不稳定和可读性差,所以A不行
区分重载最简单的规则:每个重载的方法都必须有一个独一无二的参数列表,D选项肯定是重载的了
至于B,int 和long虽然是不同的类型,但都是整形,虽不能说不是重载,但如果只选一个,还是D更接近
notlogin 2010-04-17
  • 打赏
  • 举报
回复
B不是么 如果B不是,D也不是

重载的定义就是方法名相同,然后 只要返回值类型、参数类型、参数个数,三者其中之一不同,就是重载函数

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧