Scala 中的抽象类型与相关特性
1. 抽象类型
抽象类型声明如 “type T” 是子类中具体定义的占位符。它代表在类层次结构中后续会明确的类型,在声明处该类型是未知的,不同子类可以为其提供不同的实现。
以模拟动物饮食习惯为例,最初的设计如下:
class Food
abstract class Animal {
def eat(food: Food)
}
class Grass extends Food
class Cow extends Animal {
override def eat(food: Grass) = {} // 这行代码无法编译
}
上述代码编译会出错,原因是 Cow
类中的 eat
方法参数类型为 Grass
,与 Animal
类中 eat
方法的参数类型 Food
不同,不能构成方法重写。
若放宽类型系统限制,可能会出现不安全的情况,比如以下代码:
class Food
abstract class Animal {
def eat(food: Food)
}
class Grass extends Food
class Cow extends Animal {
override def eat(food: Grass) = {} // 这行代码无法编译
}
c