Scala—不变、协变、逆变

前提条件

父子类

  class Animal{
    def eat(): Unit ={
      println("动物吃东西")
    }
  }

  class Cat extends Animal {    //猫科动物
    override def eat(): Unit = {
      println("猫科动物吃肉")
    }
  }

  class Tiger extends Cat {    //老虎属于猫科动物
    override def eat(): Unit = {
      println("老虎吃空气!!!")
    }
  }

正常的多态继承

def main(args: Array[String]): Unit = {
    val animal1:Animal = new Animal
    val animal2:Animal = new Cat;
    val animal3:Animal = new Tiger;
    val cat1:Cat = new Cat
    val cat2:Cat = new Tiger
    val tiger1:Tiger = new Tiger

Array不继承父子类的属性
在这里插入图片描述

在这里插入图片描述

不变、协变、逆变

不变

添加Invariant类

class Invariant[T]{} //不变

在这里插入图片描述

协变

class Covariant[+T]{} //协变

在这里插入图片描述

逆变

class Inversion[-T]{} //逆变

在这里插入图片描述

总结

不变
b虽然是a的儿子,假设他们都有一家公司,但 儿子b 的公司不是 老子a 公司的子公司

协变
n是m的儿子,假设他们都有一家工厂,儿子n 的工厂也是 老子m 公司的分工厂

逆变
x子是y的儿子,假设他们都有一家公司,儿子x 开了一家子公司,让 老子y 当董事长

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值