协变
package com.test.协变和逆变
/**
* 这是一个协变的例子
*/
/**
* 动物类,父类
*/
class Animal{
}
/**
* 子类继承父类
*/
class Bird extends Animal{
}
/**
* 吃东西的类
* @tparam T
*/
class EatSomething[+T](t:T)
object CovarianceDemo {
def main(args: Array[String]): Unit = {
//创建一个bird吃东西的类
var bird:EatSomething[Bird] = new EatSomething[Bird](new Bird)
//创建一个动物吃东西的类
//问题:能否将bird赋值给animal
//原因:尽管Bird是Animal的子类,
// 但是EatSomething[Bird]不是EatSomething[Animal]的子类,两者之间不具备继承关系
//解决:使用协变class EatSomething[+T](t:T),可以认为EatSomething[Bird]是EatSomething[Animal]的子类
var animal:EatSomething[Animal] = bird
}
}
逆变:
package com.test.协变和逆变
/**
* 这是一个逆变的例子
*/
//父类
class Animal{}
//子类