ala*_*lan 23 java casting object
何时可以将某个对象转换为另一个对象?铸造对象是否必须是另一个对象的子类型?我正试图找出规则......
编辑:我意识到我根本没有解释我的问题:基本上我正在将一个对象转换为接口类型.但是,在运行时,我得到了一个java.lang.ClassCastException.我的对象需要发生什么才能将其转换为此接口?是否必须实施它?
谢谢
cod*_*ict 31
在Java中,有两种类型的引用变量:
向下转换:如果您有一个引用子类型对象的引用变量,则可以将其指定给子类型的引用变量.您必须进行显式转换才能执行此操作,结果是您可以使用此新引用变量访问子类型的成员.
上传:您可以显式或隐式地将引用变量分配给超类型引用变量.这是一种固有的安全操作,因为赋值限制了新变量的访问能力.
是的,您需要直接或间接地实现接口,以便将类对象引用分配给接口类型.
小智 5
假设我们要将d对象转换为A,
a a =(C)d;
因此在内部,编译器和JVM检查了3条规则。 编译器在编译时检查前两个规则,而JVM将在运行时检查最后一个规则。
规则1(编译时间检查):
'd'和C的类型必须具有某种关系(子代与父代或父代与子代或同一时间)。如果没有关系,我们将得到一个编译错误(不可转换类型)。
规则2(编译时间检查):
“ C”必须是“ A”的相同类型或派生类型(子类),否则我们将得到编译错误(不兼容类型)。
规则3(运行时异常):
运行时对象类型“ d”必须相同或派生为“ C”类型,否则我们将获得运行时异常(ClassCastException Exception)。
查找以下示例以获取更多想法,
String s = new String("hello"); StringBuffer sb = (StringBuffer)s; // Compile error : Invertible types because there is no relationship between.
Object o = new String("hello"); StringBuffer sb = (String)o; // Compile error : Incompatible types because String is not child class of StringBuffer.
Object o = new String("hello"); StringBuffer sb = (StringBuffer)o; // Runtime Exception : ClassCastException because 'o' is string type and trying to cast into StingBuffer and there is no relationship between String and StringBuffer.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28645 次 |
| 最近记录: |