Scala---不变、协变、逆变

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]        //写子类,就会报错

  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值