我正在为70-483考试学习,我对转换类型有疑问。我跟着一本书,每一章的结尾都有一些问题/答案,其中一个我完全迷惑了。
如果Manager类从Employee类继承,而Employee类和Customer类都从Person类继承,那么下面哪个类正在缩小转换范围? a.将某人转变为经理 b.将雇员转为经理 c.将雇员转为某人 d.将经理改为某人 e.将经理转换为雇员 f.将某人转为雇员 g.将客户转变为雇员 h.将雇员转变为客户
答案是:
"A,B,F.(从技术上讲,你可以把g和h看作是收缩转换,但实际上它们只是无效的转换)。“
据我所知,我认为a,b,f正在扩大转换范围。
发布于 2016-11-03 15:21:31
如果我做了
Person originalType = new Customer();
Employee resultType = (Employee)originalType; //this line is Example f in the book.如果出现无效的强制转换异常,第2行将失败。这意味着,当您将Person转换为Employee时,有一个值可能是失败的。
如果你再看看你的两条规则(强调我的)
您将看到这将属于第二条规则的范围,因为我们确实找到了一个无法表示为结果类型的原始类型的值。
发布于 2016-11-03 15:19:33
将Person转换为Manager并不是在扩大,因为并非所有Person对象(原始类型)都可以在结果类型中表示。为什么?因为Customer也是一个Person,Customer不能是Manager。
但是,如果我们要从Manager转换为Person,那么我们可以对每个Manager对象进行转换。没有Manager,我们不能转换为Person。因此,这种情况正在扩大。
合乎道理?
发布于 2016-11-03 15:22:20
缩窄是指为较大组的子集创建类时,主要存储其他数据。
因此,当您将一个人转换为一个员工时,您是从一个较小/较窄的组/类型的角度来看待它(员工是一个人,但一个人并不一定是一个雇员)。
同样适用于将员工转换为经理,将人转换为员工
https://stackoverflow.com/questions/40405167
复制相似问题