关于实现接口的问题

shuanlarousi1 2009-07-26 10:17:52
我实现了两个不同的接口,但是两个接口中都有一个名字为getMoney(),两个getMoney()函数只有返回值的类型不同,
例如:
public interface A
{
public void getMoney();
}
public interface B
{
public String getMoney();
}
public class Test implements A , B
{
public void getMoney()
{
System.out.println("A.getMoney");
}
public String getMoney()
{
String temp="dfadfa";
return temp;
}
}
当我在new一个Test类的对象t的时候,调用t.getMoney(),会不会出现错误,如果不会出现错误,那么默认情况下调用哪个getMoney()方法呢?如果会出现错误,为什么?
...全文
183 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
见到
  • 打赏
  • 举报
回复
鄙视楼主 以后ydcydc就骂他
zl3450341 2009-07-26
  • 打赏
  • 举报
回复
编写太乱了
冰思雨 2009-07-26
  • 打赏
  • 举报
回复
编译无法通过。
alexjack1210 2009-07-26
  • 打赏
  • 举报
回复
楼主,这是刚学吧,以自己的思维写的吧,没学过C语言-C++吗?两个接口里的方法不能同名的,会出错!一个类可以实现多个接口,但个接口里的方法名不能相同,除非参数不同(这个我想能通过)。
virus7581 2009-07-26
  • 打赏
  • 举报
回复
lz没试过么,编译都不能通过的,最基本的方法重载问题
pmlxp 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 single0405 的回复:]
说实在的,我写了怎么多年的代码,没见过怎么乱的。楼主是不是故意这样写,如果不是只能说明你的基础还不过关:

上面的代码有一个很严重的问题,编译都不可能通过,不要说是运行了。

JVM识别用方法名和参数列表来唯一标识方法。也就是说具有相同方法名和参数列表,但返回值不同的两个方法被视为同一个方法。

在你写的代码Test类中既然有完全一样的两个方法,你让虚拟机如何抉择。只能在编译阶段就给灭掉。

我觉得你可能把方法重载(方法覆盖)问题搞混淆了。如果两个相同方法在两个不同类中,而且这两个类具有继承关系,这种情况叫做方法重载。这是为了满足OOP程序设计中多态性能而设置的。JVM会通过动态绑定机制在运行中准确找到你需要调用的方法。

在同一个类中绝对不允许出现相同方法,要么方法名一样,参数列表不同。

代码里面还有一个小问题:System.out.println( "A.getMoney ");  估计你是想写伪代码吧!像我这种懒人一般直接将你的代码copy运行了,呵呵
[/Quote]
非常同意
阿士匹灵 2009-07-26
  • 打赏
  • 举报
回复
这种情况以前 讨论过

但在平时工作开发中 谁会这么做啊
纯属特殊情况

太专牛角尖了
呵呵
single0405 2009-07-26
  • 打赏
  • 举报
回复
关于多态的动态绑定机制 可以看看 http://hxraid.javaeye.com/admin/blogs/428891。这个是我最近开的博,顺便推销一下,欢迎进来扔砖头。

也可以看看《core java 2》 第一卷P148-149

single0405 2009-07-26
  • 打赏
  • 举报
回复
说实在的,我写了怎么多年的代码,没见过怎么乱的。楼主是不是故意这样写,如果不是只能说明你的基础还不过关:

上面的代码有一个很严重的问题,编译都不可能通过,不要说是运行了。

JVM识别用方法名和参数列表来唯一标识方法。也就是说具有相同方法名和参数列表,但返回值不同的两个方法被视为同一个方法。

在你写的代码Test类中既然有完全一样的两个方法,你让虚拟机如何抉择。只能在编译阶段就给灭掉。

我觉得你可能把方法重载(方法覆盖)问题搞混淆了。如果两个相同方法在两个不同类中,而且这两个类具有继承关系,这种情况叫做方法重载。这是为了满足OOP程序设计中多态性能而设置的。JVM会通过动态绑定机制在运行中准确找到你需要调用的方法。

在同一个类中绝对不允许出现相同方法,要么方法名一样,参数列表不同。

代码里面还有一个小问题:System.out.println( "A.getMoney "); 估计你是想写伪代码吧!像我这种懒人一般直接将你的代码copy运行了,呵呵
sangshusen_1988 2009-07-26
  • 打赏
  • 举报
回复
方法签名一样,编译通不过的
bigbug9002 2009-07-26
  • 打赏
  • 举报
回复
public   class   Test   implements   A {
class InnerTest implements B{
public String getMoney(){
String temp= "dfadfa ";
return temp;
}
}
public void getMoney(){
System.out.println( "A.getMoney ");
}
public String getMoneyS(){
return new InnerTest().getMoney();
}
}
bigbug9002 2009-07-26
  • 打赏
  • 举报
回复
同意楼上.
应该用内部类来实现.
public   class   Test   implements   A {
class InnerTest implements B{
public String getMoney(){
String temp= "dfadfa ";
return temp;
}
}
public void getMoney(){
System.out.println( "A.getMoney ");
}
}


knightzhuwei 2009-07-26
  • 打赏
  • 举报
回复
一个类里面不能存在两个名字和参数列表都相同但是返回值不同的方法 而你的Test违反了这一点 所以会报错
ZangXT 2009-07-26
  • 打赏
  • 举报
回复
先别说调用,你编译能通过吗?

java中你没用办法实现这样的情形,你的设计有问题。
knightzhuwei 2009-07-26
  • 打赏
  • 举报
回复
这么写编译应该通不过
bigbug9002 2009-07-26
  • 打赏
  • 举报
回复
没有得分的同学们到下面的贴子中领点非技术分吧.

http://topic.csdn.net/u/20090726/16/8df3be59-ff1a-42c1-aec9-5c2db1c22e4b.html

bigbug9002 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ydcydc 的回复:]
http://blog.sina.com.cn/u/1631047704 我的博客中有详尽说明
[/Quote]

你的博客里有个屁!

明目张胆的倒分!
ydcydc 2009-07-26
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/u/1631047704 我的博客中有详尽说明
tg008007x3 2009-07-26
  • 打赏
  • 举报
回复
多多站在编译器的角度想问题,也需事情将会变的越来越美好,不单单是这种问题。。。
加载更多回复(2)

62,614

社区成员

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

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