public class A {
  public void callB_Fa(){
    B fb = new B();
    fb.callFa();   
  } 
}
//以下两个B类在不同的包下面 
public class B { 
  public void callFa(){
    System.out.println("YES");
  }
}
public class B {
  public void callFa(){
    System.out.println("No");
  }
}
//Junit测试A类中的callB_Fa()方法,有两条case。case1:要A类调用第一个B类的方法,case2:要A类调用第二个B类的方法。但不能修改A类
public class testA { public void test001(){
   A a = new A();
   a.callB_Fa(); //此时需要A类调用第一个B类
 } public void test002(){
   A a = new A();
   a.callB_Fa(); //此时需要A类调用第二个B类
 }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【linkagez00】截止到2008-07-01 23:02:42的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    能不能通过LoadClass方法 执行Case2时 自动加载第二个B类
      

  3.   

    如果不改变现有的  A和B的代码,只通过修改 test 来达到你说的目的,我认为是不可能的首先在编译class A时就必须指定 class B是哪个包下面的啊 怎么可能通过类加载器来改变类的实现呢。如果可以修改 A 和 B 的话那当然可以 编写接口或抽象类 在通过setter来动态实例啊(但这违背了你要解决的问题)
      

  4.   

    能不能这样试下:
    Class c1 = Class.ForName("B包1");
    B b = (B)c.newInstance();Class c2 = Class.ForName("B包2");
    B b2 = (B)c.newInstance();
      

  5.   

    A原来要用第一个B类 我现在的Case2是要它调用第二个B类 但A类不能修改 可行否??  
      

  6.   

    5楼是对的,通过Class.forName动态反射调用
      

  7.   

    红客(信息安全员)   在中国,红色有着特定的价值含义:正义、道德、进步、强大等,红客正是兼具这几项品质的网络守护神。他们是与黑客截然对立的电脑爱好者,热衷于研讨电脑的攻防技术,并使它不断完善,从而更好地为人们服务。他们充当着网络信息安全员的角色,是新近兴起的网络“尖兵”。 java自动设置环境变量
    更多信息请参考java论坛