用个例子:
view plaincopy to clipboardpr?
public animal
{
private age;
private String color;
public void eat {}
}
public animal
{
private age;
private String color;
public void eat {}
}
view plaincopy to clipboardpr?
public dog extends animal
{
private String _disibledevent=>
再举个例子:
view plaincopy to clipboardpr?
human{ sum;}
man extends human
{
double sum;
public void (String args)
{
human a= man;
man b= man;
b=(man)a;
}
}
human{ sum;}
man extends human
{
double sum;
public void (String args)
{
human a= man;
man b= man;
b=(man)a;
}
}
可以把“人”强制转换成“男人”吗??很显然不能
所谓“父类向子类转换是强制转换”是指这种情况
human a= man;
man b=(man)a;
此时a实际上是个man例子但被定义为human这样就无法man中定义思路方法只有在强制转换为man例子后才能B中定义思路方法——前提:a是man例子. 这里做个备注: 这会不会是小田迷惑那个问题所在?回头再想想
如果是
human a= human;
man b= man;
b=(human)a;
a本身是human例子不具有B特征使不能转换为B例子
这就像你不能
Object obj= Object;
String str = (String)obj;样
另个问题.强制类型转换有时会造成精度下降,这在数值转换里面常见.
举例如下:
view plaincopy to clipboardpr?
public test
{
public void (String args)
{
// TODO Auto-generated method stub
i = 123;
double d = 1.23;
double ToDouble = (double)i;
doubleToInt = ()d;
.out.prln(ToDouble);
.out.prln(doubleToInt);
}
}
public test
{
public void (String args)
{
// TODO Auto-generated method stub
i = 123;
double d = 1.23;
double ToDouble = (double)i;
doubleToInt = ()d;
.out.prln(ToDouble);
.out.prln(doubleToInt);
}
}
输出结果如下:
123.0
1
可以看到,在由double转类型时,对数据进行了截断,造成了数据丢失或者说精度下降,这在非刻意需求情况下,是需要避免进行类似强制转换.这种转换编译器不报错,如果非coder本意,查错时会很难发现,所以尽量避免.
今晚犯了个,认为double不能转,实际是可以.其他问题,现在理理,其实思路都是对.不过当时思路不清,搞不清楚他们想说什么,自己也解释不清自己思路,脑袋瓜慢慢就浑了... 唉,其实整个后半天脑袋瓜都不在状态了,以后不能再空腹喝咖啡了,想体验茶醉兄弟可以试试,心惶惶还亢奋,不爽,极为不爽.
最新评论