前提条件
父子类
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 当董事长