//抽象类方式
findViewById<TextView>(R.id.hwtv).setOnClickListener {
val randomNumber = (0..10).random()
val car = if (randomNumber % 2 == 1){
DasAuto()
} else {
Porsche()
}
Log.d("", car.price())
}
//反射方式
findViewById<TextView>(R.id.fstv).setOnClickListener {
val randomNumber = (0..10).random()
val car = if (randomNumber % 2 == 1){
getClass(DasAuto::class.java)
}else{
getClass(Porsche::class.java)
}
Log.d("", car.price())
}
fun <T : Car> getClass(clz : Class<T>) : T{
val car = Class.forName(clz.getName()).newInstance() as Car
return car as T
}
需要三个类
abstract class Car {
abstract fun placeOfOrigin() : String
abstract fun price() : String
abstract fun color() : String
abstract fun model() : String
}
class DasAuto : Car() {
override fun placeOfOrigin(): String {
return "德国"
}
override fun price(): String {
return "十万"
}
override fun color(): String {
return "白色"
}
override fun model(): String {
return "两厢轿车"
}
}
class Porsche : Car() {
override fun placeOfOrigin(): String {
return "德国"
}
override fun price(): String {
return "一百万"
}
override fun color(): String {
return "蓝色"
}
override fun model(): String {
return "轿车"
}
}