我有两个函数
void foo(a atmp) {};
void foo(b atmp) {};我有一个变量这样定义:
a bi = new b();我这样调用:
foo(bi);这时,将进入第一个函数,也即 foo(a atmp)
然而 这和我的本意违背了 我想调用的是第二个函数问:肿么办

解决方案 »

  1.   

    a bi = new b();a 和 b 是什么关系啊?
      

  2.   

    你这样去调用当然进第一个了,多态的实质是:若b继承于a,你这么声明a bi = new b();a中有个方法,b中也有一个重载方法,若这时你调用bi.methodName()则它回去执行b中的方法
      

  3.   

    把foo的功能,变成 a类的 方法。
      

  4.   


    这个foo是现成的代码。。我没有能力改动它
      

  5.   

    首先只能说这种设计是有问题的。因为既然已经有了void foo(a atmp)这个方法,就不应该再有void foo(b atmp),因为b也是a。所以比较合理的做法应该是在void foo(a atmp)这个方法里面,如果需要对atmp是b类型的情况特殊处理的话,可以使用instance of进行判断后处理。
      

  6.   


    a bi = new b();改成  
    b bi=new b();
    这样会调用void foo(b atmp) {};方法重载是在编译时绑定,貌似会根据变量的类型选择方法体
      

  7.   

    a b bi之间的关系是什么?
      

  8.   

    哦.没看清楚你的代码..有没有试过把bi强转成b然后看他进入哪个方法
      

  9.   


    class A
    {
        void myfoo()
        {
            foo((A)this);
        }
    }class B extends A
    {
        void myfoo()
        {
            foo((B)this);
        }
    }
    这不就得了。
      

  10.   

    如果觉得不爽,就给myfoo加个wrapper:myfooWrapper(A a)
    {
        a.myfoo(); 这样就OK了吧?
    }
      

  11.   

    想调用第二个很简单啊,调用时把bi强转一下 foo((b)bi);
      

  12.   

    好吧 用强转的都是不看帖的人 不过还是谢谢了我现在用反射可以解决
    getMethod(...).invoke(...) 就可以调用啦