子类中怎么获取基类的实例
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
------解决方案--------------------B既然继承A那B就是A了
你如果一定要在B中获取一个纯种的A 那就在NEW一个A了
------解决方案--------------------A)this
汗,只听说过父类强转成子类
Object o=new Object;
String s=(String)o;
没听说过子类强转成父类。。。
没写对吧,
子类的指向肯定包含信息比父类的多,所有你把String s指向object时,string时面多出来的旨向该往哪指呢,你这样应该也是错的吧,
最多只能这样子
Object o = (Object)new String();
------解决方案--------------------已经说的很清楚了,结贴吧
------解决方案--------------------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对象。
------解决方案--------------------学习,顶帖!
------解决方案--------------------个人感觉他省略的cm方法中应该是
public cm(A a)
System.out.println(a.getClass().getName());
这题出的知识点是转型以后 a 对象所表示的实体是什么
实际编程中可以吧所有的东西都转换成Object存入容器中
用的时候再从容器中取出来判断 obj instanceof 对象所表示的实体
如果等于true 再转换为对象所表示的实体 拿来使用