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