class D1{
      public void showMessage(){
           System.out.println("this is class D1");
      }
}class D2{
      public void showMessage(){
           System.out.println("this is class D2");
      }class Test{      public static void getWhichClass(Object o){
           //how to do if I want to invoke the method in class D1 or D2
      }      public static void main(String[] args){
           getWhichClass(new D1());
           getWhichClass(new D2());
      }
}请问,有什么方法可以通过方法getWhichClass方法调用到D1类或者D2类中的方法而不用进行强制转化吗 
           

解决方案 »

  1.   

    public static void getWhichClass(Object o)是void没有返回的,呵呵无法获取对象,
    你是指在这个方法里面填写代码吗?
    public static void getWhichClass(Object o){
              //how to do if I want to invoke the method in class D1 or D2
         new D1().showMessage();//直接实例化没有对象名的调用
         D2 d2 = new D2();//实例化一个对象名称d2
         d2.showMessage();
      

  2.   

    修改成getWhichClass(Class c) 然后判断Class的是哪个类的.class方法返回的 就可以区别开来 分别调用了
      

  3.   

    方法而不用进行强制转化??说实在的,我不理解方法的强制转化!
    一般是类进行强制转换,
    上面的类要在同一个package下面,不然没有public修饰符,是无法访问的!
      

  4.   


    class D1{ 
          public void showMessage(){ 
              System.out.println("this is class D1"); 
          } 
    } class D2{ 
          public void showMessage(){ 
              System.out.println("this is class D2"); 
          } 
    }public class Test{       public static void getWhichClass(Object o){ 
              //how to do if I want to invoke the method in class D1 or D2 
           try{
           o.getClass().getMethod("showMessage", null).invoke(o, null);
           } catch(Exception ex) {
           ex.printStackTrace();
           }
          }       public static void main(String[] args){ 
              getWhichClass(new D1()); 
              getWhichClass(new D2()); 
          } 
      

  5.   

    用我的那个反射就可以了,有个条件就是你必须要知道方法的名称如:
     o.getClass().getMethod("showMessage", null).invoke(o, null);
      

  6.   


    你完全可以写在不同的包下 然后在Import下
      

  7.   

    使用接口就可以了interface D{
    void showMessage();
    }
    class D1 implements D{ 
        public void showMessage(){ 
            System.out.println("this is class D1"); 
        } 
    } class D2 implements D{ 
        public void showMessage(){ 
            System.out.println("this is class D2"); 
        } class Test{     public static void getWhichClass(D d){ 
            d.showMessage();
        }     public static void main(String[] args){ 
            getWhichClass(new D1()); 
            getWhichClass(new D2()); 
        } 
      

  8.   

    抱歉 来的有点晚了 强制转化我指的是向子类转化 很感谢huoyin的意见  不过可以问下  编译出现的警告的原因是什么吗 原文如下:
     The argument of type null should explicitly be cast to Object[] for the invocation of the varargs method invoke(Object, 
     Object...) from type Method. It could alternatively be cast to Object for a varargs invocation
      

  9.   

    比如public static void getWhichClass(Object o){
              //how to do if I want to invoke the method in class D1 or D2
                   ((D1)o).showMessage();
          } 
      

  10.   

    用下面的这个就没有了:
    o.getClass().getMethod("showMessage", new Class[]{}).invoke(o, new Object[]{});
      

  11.   

    huoyin 的编译有问题,lgh1117 的可以
      

  12.   

    学习,huoyin已经更正过了,是参数类型不匹配问题~~强!!
      

  13.   

    谢谢啊 interface和reflect技术都可以解决  谢谢了