大数据全系列 教程
1869个小节阅读:465.1k
目录
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
package com.itbaizhan.chapter10
object Generic2 {
class Animal{}
class Person extends Animal{}
class Man extends Person{}
//TODO 1.scala中的泛型使用[] ,java中的泛型使用<>
class Car[T]{}
//TODO 3.1泛型和类型不是一个层面的概念,所以无法联合使用,不方便。
// 如果将泛型和类型作为一个整体使用的话,那不就方便了吗?
// A.将类型和泛型联合使用,类型相同且泛型存在父子关系时,
// 那么联合的类型也就存在了父子类关系,该操作称之为协变。[+T]
class Truck[+T]{}
//TODO 4.1 类型相同且泛型之间存在父子关系,让联合后的类型存在
// 子父关系,这个操作称之为逆变。[-T]
class Bus[-T]{}
def main(args: Array[String]): Unit = {
//TODO 2.scala中基础的泛型是不可变的,声明和实例化使用的泛型要保持一致。
val car1:Car[Person] = new Car[Person]
//val car2:Car[Person] = new Car[Animal]//错误的
//val car3:Car[Person] = new Car[Man]//错误的
//TODO 3.2 协变使用的演示
val truck1:Truck[Person] = new Truck[Person]
val truck2:Truck[Person] = new Truck[Man]
//val truck3:Truck[Person] = new Truck[Animal]//错误的
//TODO 4.2逆变使用的演示
val bus1:Bus[Person] = new Bus[Person]
val bus2:Bus[Person] = new Bus[Animal]
//val bus3:Bus[Person] = new Bus[Man]//错误的
}
}
实时效果反馈
1. 关于Scala泛型协变和逆变的描述,错误的是:
A 将类型和泛型联合使用,类型相同且泛型存在父子类关系时,那么联合的类型也就存在父子类关系,该操作称之为协变, [+T]。
B 类型相同且泛型之间存在父子关系,让联合后的类型存在子父关系,这个操作称之为逆变, [-T]。
C 协变使用时声明的泛型可以为父类,实例化中使用的泛型可以是子类。
D 逆变使用时声明的泛型可以为父类,实例化中使用的泛型可以是子类。
答案:
1=>D 逆变使用时声明的泛型可以为子类,实例化中使用的泛型可以是父类。