Kotlin协变out (? extends)
open class People() {
open fun show() {
println("people")
}
}
class Man() : People() {
override fun show() {
println("男人")
}
}
class Woman() : People() {
override fun show() {
println("女人")
}
}
interface Product<out T> {
fun getProduct(): T
}
class ProductOne() : Product<People> {
override fun getProduct(): People {
return People()
}
}
class ProductTwo() : Product<Woman> {
override fun getProduct(): Woman {
return Woman()
}
}
fun main() {
var man: Product<People> = ProductTwo()
}
kotlin 逆变in(?super)
open class People() {
open fun show() {
println("people")
}
}
class Man() : People() {
override fun show() {
println("男人")
}
}
class Woman() : People() {
override fun show() {
println("女人")
}
}
interface Product2<in T>{
fun setProduct2(item:T){
}
}
class Product2One:Product2<People>{
override fun setProduct2(item: People) {
println(item.show())
}
}
fun main() {
var people:Product2<Woman> = Product2One()
people.setProduct2(Woman())
}