我有一个class比如
public class Magic implements Serializable{
}
,这个类不继承
public class Amount{
}
是否有办法将Magic
转换为Amount
,我将不会访问任何字段,我只需要魔法"成为"金额?有办法吗?
没有。Amount
实例与Magic
实例无关。
这是正确的,即使两个类看起来相同,但在你的例子中它们肯定不是。
在这种情况下,您需要忍受编写代码将Magic
转换为Amount
的痛苦。可以在Amount
中有一个构造函数,以Magic
实例作为参数。
或者,如果Amount
只包含函数,那么考虑将其重铸为interface
,这由Magic
实现。
在Java中不能在不相关的类型之间进行强制转换。如果您需要从Magic
实例创建Amount
实例,您应该有一个接收这样一个参数的构造函数:
public class Amount {
public Amount(Magic m) {
// Initialize amount's fields...
}
}
强制类型转换不会自动将对象从一种类型转换为另一种类型。
强制类型转换是一种禁用编译器类型检查的方法。强制类型转换所做的唯一一件事就是告诉编译器:"这是一个对象,我比你更清楚这是什么类型的对象,所以我希望你把它当作这种类型的对象来对待,不要抱怨"。
在运行时仍然会进行类型检查,如果此时对象确实不是您所说的类型,您将得到一个ClassCastException
。
强制类型转换不能自动将Magic
对象转换为Amount
对象。
您需要自己编写代码来使用Magic
对象的数据创建Amount
对象。
让Magic
成为Amount
的唯一方法是让您的类:Magic
扩展Amount
类。
你想在类之间建立一个is a
链接,这是通过继承来实现的。