public class A{
  public String as;   
}public class B extends A{
  super.as = "test";  
  public void method(){
       C c = new C();
       c.cm((A)this);   //????? 这儿怎么获取 基类 A 
   }
}
public  Class C{
   public cm(A a){
      .......
   }
}
最后运行结果 在cm 方法中得到的类型是 B 

解决方案 »

  1.   

    把c.cm((A)this)改成c.cm(new A())
      

  2.   

    c.cm(this);   
    B继承A,具有A的一切行为除非按楼上写的那样,但传过去的是一个新的实例    
      

  3.   

       把c.cm((A)this)改成c.cm(new   A())   这儿不能传过去一个新实例,因为在B类实例化中已经对A中数据初始化了   c.cm(this);       
       B继承A,具有A的一切行为 
        
       
      c.cm 方法的参数必须是A类, 因为 c.cm要根据 A的名称读一些相关的配置
      

  4.   


    class   A{ 
        public   String   as; 
        public A a = this;
    } class   B   extends   A{ 
        super.as   =   "test";     
        public   void   method(){ 
              C   c   =   new   C(); 
              c.cm(super.a);  
        } 
    }不知对不对
      

  5.   

    如果 this 已经是子类,他就永远不可能变成父类,尤其在运行期间。
    而所谓的(A)this 只是在编译的时候有用,运行时,这个转换没有任何作用
      

  6.   

            try {
                c.cm(super.getClass().newInstance());
            } catch (IllegalAccessException ex) {
                ex.printStackTrace();
            } catch (InstantiationException ex) {
                ex.printStackTrace();
            }
      

  7.   

    B既然继承A那B就是A了
    你如果一定要在B中获取一个纯种的A 那就在NEW一个A了
      

  8.   

    (A)this  
    汗,只听说过父类强转成子类
    Object o=new Object;
    String s=(String)o;   
    没听说过子类强转成父类    
      

  9.   

    一般情况下既然B继承了A,那么B就有A的一切特性,B继承了A除了构造函数以外的所有方法和特性,所以一般super用来调用A的构造函数,从没见过super.as这种写法,我也不知道这个写法有什么意义,另外不知道为什么c.cm传入的参数必须是A,A能做的事情B都能做,A的引用不好获得,B的引用好获得,把A传进去做什么?
      

  10.   

    A)this     
    汗,只听说过父类强转成子类 
    Object   o=new   Object; 
    String   s=(String)o;       
    没听说过子类强转成父类         没写对吧,
    子类的指向肯定包含信息比父类的多,所有你把String s指向object时,string时面多出来的旨向该往哪指呢,你这样应该也是错的吧,
    最多只能这样子
    Object o = (Object)new String();
      

  11.   

    还有不知道楼主是啥子意思,这个问题很简单,你要明白你设计的意图,你是想取得一个纯种的A,如就只能new A()如果你是想取得在B extends A以后在B中的A的部分,你传this进去显然是错误的,如果实在要取的话(A)this也应该是正确的,但是你要注意一点,这样子相当于于你当前对象this就同时有两个指向了,数据的修改上就值得考虑了,
    给分,给分,
      

  12.   

    LZ的(A)this只是躲开了编译器,而是B类型,是因为B继承A,他们在内存是这样分布,比如你new B的时候,在内存中B占1到100的空间,而继承过来的A则占1-N(N<100),B-100(B新增加的数据)在内存中,A和B的头地址都是一样的,当转(A)this到函数CM的时候,为了与你的函数叁数类型匹配,简单的躲过编译,而在运行的时候,用的还是用到new B()所分配的内存,当然就显示是B类型的了。
    假如你用new A()代替了(A)this,那么在内存中只有A,而没有B的数据,那么,CM里面肯定就显示A对象。
      

  13.   

    个人感觉他省略的cm方法中应该是
    public   cm(A   a) 
    System.out.println(a.getClass().getName());这题出的知识点是转型以后 a 对象所表示的实体是什么实际编程中可以吧所有的东西都转换成Object存入容器中
    用的时候再从容器中取出来判断 obj instanceof 对象所表示的实体 
    如果等于true 再转换为对象所表示的实体 拿来使用