/* * 定义: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() }