例如
int a=0;
doubel b=a;
这样隐式转换是没问题的,我的理解是int类型的长度比doubel的长度短
doubel a=0;
int b=(int)a;
在知道a的长度不会超过int的长度时也是可以的
class A
class B:A
B b=new B();
A a=b;
这样是正确的,但是按照我的理解b的成员和应该是多余a的,这样转换难道就不会有数据丢失?就象我上面理解的大的转成小的不是应该显示转换吗?
反过来
A a=new A();
B b=(B)a;
小的转成大的不应该隐式就行吗?
这个问题困扰我很久,求跪求解答,谢谢
别搞把类型转换同多态搞混淆了。
int b=(int)a; // 类型转换,执行的是内存拷贝
A a=b;// 多态,允许父类指针指向派生类对象。
首先说A a = b; 因为B继承自A,所以可以理解为B的成员>=A。那么直接将b的地址(注意只是地址)给a,a所有的成员都能在b中找到对应。同时,由于是引用的变化,那么b的实际数据是没变化的,那么这个时候反射a的话,能拿到完整的b的成员。
对于B b=(B)a;由于a的成员少,b不知道怎么映射,所以就不行了。引用类型可不能像值类型那样损失精度。