
你现在的位置 4 185
abstract classes and interfaces
抽象类和接口
使用
as
进行显式转换
如果你想要访问某个潜在对象的行为,但编译器无法对其进行智
能转换,
你可以显式地将该对象转换成合适的类型。
假设你能够确定名为r的Roamable类型变量保存的是Wolf对象的
引用。在这种情况下,你可以使用as操作符去复制一份Roamable
类型变量中保存的引用,并强制地将该引用赋给一个新的Wolf类
型变量。然后你就可以使用该Wolf类型变量去访问Wolf的行为。
具体代码如下:
如果你不确定某个对象是否为一个Wolf对象,你可以像这样在转
换之前使用is操作符进行检查:
var wolf = r as Wolf
wolf.eat()
要注意的是wolf和r变量保存着对同一个Wolf对象的引用。但是
r变量只知道这个对象实现了Roamable接口,而wolf变量知道该
对象本质是一个Wolf对象,所以可以视它为Wolf对象:
var Roamable
Wolf
引用
r
var Wolf
引用
wolf
if (r is Wolf) {
val wolf = r as Wolf
wolf.eat()
}
现在你已经了解了显式转换(和智能转换)是如何工作的,让我们再
更新一下Animal项目的代码。
这段代码显式地将对象转换为
W
olf
类型
,
使你可以调用它的
W
olf
方法
。
虽然
r
变量保存了
Wolf
对象的引
用
,
但由于
r
变量是
Roamable
类
型的变量
,
所以你只能用它访问
潜在对象拥有的
R
oamable
类的任
意属性和方法 ...