我实现了两个不同的接口,但是两个接口中都有一个名字为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()方法呢?如果会出现错误,为什么?

解决方案 »

  1.   

    先别说调用,你编译能通过吗?java中你没用办法实现这样的情形,你的设计有问题。
      

  2.   

    一个类里面不能存在两个名字和参数列表都相同但是返回值不同的方法 而你的Test违反了这一点 所以会报错
      

  3.   

    同意楼上.
    应该用内部类来实现.
    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 ");   
             } 
    }
     
      

  4.   

    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();
             }
    }
      

  5.   

    说实在的,我写了怎么多年的代码,没见过怎么乱的。楼主是不是故意这样写,如果不是只能说明你的基础还不过关:上面的代码有一个很严重的问题,编译都不可能通过,不要说是运行了。JVM识别用方法名和参数列表来唯一标识方法。也就是说具有相同方法名和参数列表,但返回值不同的两个方法被视为同一个方法。在你写的代码Test类中既然有完全一样的两个方法,你让虚拟机如何抉择。只能在编译阶段就给灭掉。我觉得你可能把方法重载(方法覆盖)问题搞混淆了。如果两个相同方法在两个不同类中,而且这两个类具有继承关系,这种情况叫做方法重载。这是为了满足OOP程序设计中多态性能而设置的。JVM会通过动态绑定机制在运行中准确找到你需要调用的方法。在同一个类中绝对不允许出现相同方法,要么方法名一样,参数列表不同。代码里面还有一个小问题:System.out.println( "A.getMoney ");   估计你是想写伪代码吧!像我这种懒人一般直接将你的代码copy运行了,呵呵
      

  6.   

    关于多态的动态绑定机制 可以看看  http://hxraid.javaeye.com/admin/blogs/428891。这个是我最近开的博,顺便推销一下,欢迎进来扔砖头。也可以看看《core java 2》 第一卷P148-149
      

  7.   

    应该是System.out.println( "A.getMoney "); 不对吧。
      

  8.   

    http://blog.sina.com.cn/u/1631047704 我的博客中有详尽说明
      

  9.   

    没有得分的同学们到下面的贴子中领点非技术分吧.http://topic.csdn.net/u/20090726/16/8df3be59-ff1a-42c1-aec9-5c2db1c22e4b.html
      

  10.   

    鄙视楼主 以后ydcydc就骂他