// 非变:类A和类B之间是父子类关系,但是Pair[A]和Pair[B]之间没有任何关系(Scala默认非变)
// 协变:类A和类B之间是父子类关系,Pair[A]和Pair[B]之间也是父子类关系
// 逆变:类A和类B之间是父子类关系,但是Pair[A]和Pair[B]之间是子父类关系
object 非变协变逆变 {
class Father
class Son extends Father
// 非变
class Temp1[T]
// 协变
class Temp2[+T]
// 逆变
class Temp3[-T]
def main(args: Array[String]): Unit = {
// 非变
val t1: Temp1[Father] = new Temp1[Father]
// 编译报错,Temp1[Father]和Temp1[Son]无任何关系
// val t2: Temp1[Son] = t1
// 协变
val t3: Temp2[Son] = new Temp2[Son]
val t4: Temp2[Father] = t3
// 逆变
val t5: Temp3[Father] = new Temp3[Father]
val t6: Temp3[Son] = t5
}
}