package workflow.fun_logic;  
  
public interface IFunLogic {  
    public boolean logic(Object arg1 , Object arg2);  
}  
  
  
package workflow.fun_logic;  
  
public class FunLogic_is implements IFunLogic {  
  
    public boolean logic(Object arg1, Object arg2) {  
  
/* 
将arg1,arg2还原成原类型 
*/  
                  
        return logic(arg1,arg2);  
          
    }  
      
    public boolean logic(String arg1, String arg2) {  
          
        if(null == arg1){return false;}  
        if(null == arg2){return false;}  
          
        return arg1.equals(arg2);  
    }  
      
    public boolean logic(Integer arg1, Integer arg2) {  
          
        if(null == arg1){return false;}  
        if(null == arg2){return false;}  
          
        return arg1.intValue() == arg2.intValue();  
    }  
      
}  
  
//测试  
package workflow.fun_logic;  
  
public class text {  
    public static void main(String[] arg){  
          
        IFunLogic obj = new FunLogic_is();  
          
        System.out.println(obj.logic("q","q"));       
          
    }  
      
}  望不吝赐教

解决方案 »

  1.   

    不知道楼主是要干什么。
    我知道的是,你传了2个字符串进去,它会自动转成Object类型,这样就失去了他自己所特有的属性,当然会出错。
      

  2.   

    这样写不行的吧. public boolean logic(Object arg1, Object arg2) {  
      
    /* 
    将arg1,arg2还原成原类型 
    */  
                      
            return logic(arg1,arg2);  
              
        }  让一个方法调用它自身?不过希望懂的人能过来解释一下原理.我只是感觉这样是错的,但是说不出来为什么
      

  3.   

    方法在调用的时候,会去找最相近的类型,这个和多态没有关系
    public class Test {
        public Test(Object o) {
            System.out.println("1");
        }
        public Test(String a) {
            System.out.println("2");
        }
        public static void main(String args[]) {
            new Test("a");
        }
    }
    答案是2
    但是如果改成new Test(null);
    如果两个类型,比如这里Object 和String有继承关系,按照向上原则,先匹配子类
    如果没有继承关系那就完了,比如楼主的String 和Integer,因为,这个函数可以匹配2个方法,且没有任何关系,就会产生编译错误(The constructor is ambiguous)构造函数有歧义
      

  4.   

    agr1,agr2都是object,那么它就无法匹配下面两个方法
    所以最后就变成了调用自己的死递归。
      

  5.   

    出错的原因是因为在方法:
    public boolean logic(Object arg1, Object arg2) { 
     
    /*
    将arg1,arg2还原成原类型
    */ 
                     
            return logic(arg1,arg2); -------------自己调用自己, 死循环
             
        }  
    修改:将接口改为:
    public interface IFunLogic {  
            public boolean logic(String arg1, String arg2);
    public boolean logic(Integer arg1, Integer arg2);
    } 同时在类实现接口原来的方法注释掉,其它不变,就可以了
    public class FunLogic_is implements IFunLogic { 
     
        /*public boolean logic(Object arg1, Object arg2) { 
     
                
            return logic(arg1,arg2); 
             
        } */
         ....
    }