我意识到向上转换将子类转换为超类,而向下转换则以相反的方式转换。但是,假设子类和超类有不同数量的数据类型,从子类 - >超类 - >子类的转换是否会成为数据擦除的一部分,因为子类中的某些数据部分不包含在超类中?
因为我知道当浮点型数据在c ++中转换为int时浮点被删除,我想知道它是否对java中的类的工作方式相同。
在Java中,对象类型是引用类型,这意味着表达式实际上从不计算对象,而只是对对象的引用。
因此,向上转发和向下转换根本不会触及对象;他们只是给你对象的不同类型的引用。
也就是说,这个Java代码:
(Subclass)((Superclass) instanceOfSubclass)
大致类似于这个C ++代码:
dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))
但是,如果您使用int
和float
等值类型进行转换,那么您确实会丢失数据;这个Java代码:
(double)((int) 3.5)
评估为3
而不是3.5
,因为转换为int
类型丢弃了该值的小数部分。这类似于这个C ++代码:
static_cast<double>(static_cast<int>(3.5))