Mon*_*ale 2 java oop android kotlin
这里我试图将超类对象转换为子类。我收到运行时错误“类无法转换”。
例如:
class Animal {}
class Cat : Animal() {}
class abc {
fun abcd(): Animal {
return Animal()
}
fun getData() {
val cat: Cat = abcd() as Cat //Giving me runtime error.
}
}
Run Code Online (Sandbox Code Playgroud)
您不能将基类“实例”强制转换为后代类,因为基类不一定实现其后代的行为,也不了解它们的任何信息。
在您的具体示例中,方法abcd()返回基类Animal的实例,因此不能将其转换为Cat,因为Animal可能没有Cat中定义的任何行为。
举个例子,假设您还有一个Dog类,并且Cat和Dog都实现了不同的方法,例如dog.fetch()和cat.jump()。基类Animal中不存在此类行为,因此不能将其显式强制转换为特定动物。
相反的情况也是有效的,因此将Cat转换为Animal,因为Cat继承了其基类Animal的行为。
相反,您可以做的是在abcd()中实例化Cat,并仍然返回Animal:
fun abcd(): Animal {
return Cat()
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,并且铸造将会起作用。但是,如果混合派生类,您必须注意避免在运行时潜在的ClassCastException ,例如,如果在返回类型为Animal时实例化Dog并尝试将其用作Cat。
小评论:我假设Animal在您的示例中未打开的原因只是复制/粘贴错误,因为它显然需要这样的关键字来允许继承。
| 归档时间: |
|
| 查看次数: |
6518 次 |
| 最近记录: |