Scala中包含 不变,协变,逆变
在Scala中,所有输入参数都是逆变,所有输出都是协变
当两个类存在继承关系时,它们被放入到 class[ T ] 中时,原本是不存在关系的
但是,使用 class [+T],那么这两个就存在继承关系,并且只能创建本类或者子类,
使用 class [-T] 就可以创建本类或父类
package Test
object ObjInverAndConvar {
class Animal{
def shout(): Unit ={
println("大叫一声")
}
}
class Cat extends Animal {
override def shout(): Unit = {
println("喵呜~~~~")
}
}
class Tiger extends Cat {
override def shout(): Unit = {
println("吼吼吼~~")
}
}
class Invarient[T]{} //[T] : 不变
class Convraint[+T]{} //[+T]: 协变 创建的对象只能是自己的子类或本类
class Inversion[-T]{} //[-T]: 逆变 创建的对象只能是自己的父类或本类
def main(args: Array[String]): Unit = {
var animal = new Animal
var cat = new Cat
var tiger = new Tiger
var tigerIn:Invarient[Tiger] = new Invarient[Tiger]
var convraint:Convraint[Cat] = new Convraint[Tiger]
// var convraint1:Convraint[Cat] = new Convraint[Animal] //写父类,就会报错
var inverse:Inversion[Tiger] = new Inversion[Cat]
// var inver:Inversion[Cat] = new Invarient[Tiger] //写子类,就会报错
}
}