JAVA中父类是不能强行转换成子类的,这个我清楚?但是最近在做一个项目时,遇到这种情况,我需要把父类的对象强行转换成子类的?请问各位大侠有什么好的解决办法没?
假如下面的例子:
Class A{}
Class B extends A{
   private String name;
   void setName(String n){...};
   String getName(){...};
}
 public class   C   
  {   
  public   static   void   main(String[]   args)           
  {   
          System.out.println("强制类型转换A->B后的调用效果:");   
          A   a   =   new   A();   
          B   b   = B(a); //编译通过,但是运行出错
          b.setName("test");
          System.out.println(b.getName());
  }   我的目的就是达到上面理想状态中的效果.
  }   

解决方案 »

  1.   

     A   a   =   new   b(); 
    这样就可以了   
      

  2.   

    父类的实例必须是由子类的实例上溯造型的
    所以把    A   a   =   new   A(); 
    换成A   a   =   new   B();
      

  3.   

    A   a   =   new   b(); 
    顶一个
      

  4.   

    此处借鉴的面向接口的思想, A   a   =   new   b(); 
      

  5.   

    A   a   =   new   B();  父类引用指向子类对象
      

  6.   

    谢谢各位,A   a   =   new   b() 这样是没问题的,但是我现在假设都已经通过A   a   =   new  A() 得到了对象a了,现在只是想给它加个属性name,所以我的想法是写个B类继承A,然后把a强制转换成B类型,我的思路是这样的.但行不通,看各位还有什么高招不?一定记住,已经得到了父类的对象,而且不想改关于父类的任何东西.
      

  7.   

    没有办法了吧.
    你为什么不直接new  B();然后加属性呢?    
      

  8.   

    我也想这样啊,不过没办法.原来的A不是我设计和编写的,但是现在的需求需要加个属性,所以只好重写个B继承A了(不能动A).其实笨办法倒是能实现我的想法的,但是我想求教有没什么简单的办法,呵呵!
      

  9.   

    原来的A不是我设计和编写的,但是现在的需求需要加个属性,所以只好重写个B继承A了(不能动A).什么意思?那就用B好了
      

  10.   

    发表于:2007-10-04 16:14:4411楼 得分:0 
    原来的A不是我设计和编写的,但是现在的需求需要加个属性,所以只好重写个B继承A了(不能动A).什么意思?那就用B好了 意思是给A加个属性,但是不能在动A的代码.
      

  11.   

    可以加扩展方法啊....参考:http://tech.ddvip.com/2008-01/119955698139982.html