/* * 定義:class 類名 constructor(屬性列表){更多的屬性和方法} * * 構造器:用來設置類的新實例的初始化 *open:被繼承的類或屬性關鍵字 * * */ open class Chinese constructor(var sex: Boolean,var region:String){ //普通屬性,與變量定義相似
protected open var skin="yellow"
//組合屬性,由其他屬性計算而來(get)
val avgLife: Double get() { when (this.region) { "sh" -> { return 82.4 } "ah" -> { return 77.8 } else -> { return 73.4 } } // } //組合屬性可以影響其他屬性(set,可選),this代表實例
var avg :Int get() { when (this.region) { "sh" -> { return 4900 } "ah" -> { return 3200 } else -> { return 3500 } } } set(value) { when (value) { in 4500..Int.MAX_VALUE -> { this.region="sh" } in 2800..3500->{ this.region="ah" } else -> { this.region="other" } } } //方法:
open fun cook(){ val menu= arrayOf("青椒肉絲","番茄雞蛋","紫菜湯") val desc=menu.reduce { s1, s2 ->s1+","+s2 }//連接
print("我會${desc}")//---->>我會青椒肉絲,番茄雞蛋,紫菜湯
} } //繼承
class Shanghair(sex :Boolean,region: String="sh"): Chinese(sex,region ){ //子類中的屬性
var dialect="上海話"
//屬性覆蓋
override var skin="上海黃" } class Sichuan(sex: Boolean,region: String):Chinese(sex,region){ var dialect="四川話" override var skin="四川話"
//覆蓋方法
override fun cook(){ super.cook()//繼承父類的方法
val menu= arrayOf("麻婆豆腐","烤魚") val desc=menu.reduce{s1,s2->s1+","+s2} print("我會${desc}")//我會麻婆豆腐,烤魚
} } fun main(args: Array<String>) { //實例化一個類
val yaoming=Shanghair(true) yaoming.avg=3000 println(yaoming.region)//-->>ah
print(yaoming.dialect)//--->>上海話
yaoming.cook() val guojinming=Sichuan(true,"sc") guojinming.cook() }