美文网首页
17.面向对象

17.面向对象

作者: jetgege | 来源:发表于2017-11-22 10:24 被阅读6次
    
    
    /**
     * 描述:面向对象编程
     * 对某种事物进行抽象化,称为"建模(model)",就像提取生物的基因.
     *  一个模型称之为一个类(class), 从而简化认知, 找到规律
     *   特征和属性: 需氧/厌氧, 寿命(多方因素影响)   -- 变量(属性)
     *   功能和行为: 进食,奔跑,睡觉,卖萌,求偶       -- 函数(方法)
     *   繁殖: 继承和多态
     *   要创造一个具体的生物,必须予以配置参数,即"实例化(instance)"
     * 作者:jet
     * 创建时间: 2017-11-21 15:51
     * 修改人:
     * 修改时间:
     * 修改内容:
     */
    //快捷定义:class类名 constructor(属性列表){更多属性和方法描述}
    //构造器:用来设置类的新实例的出厂配置
    
    open class Chinese2(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
                }
            }
    
        var avgSalary: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="othre region"
            }
        }
    
        //方法:厨艺
        open fun cook() {
            val menu= arrayOf("青椒炒肉丝","番茄炒蛋","紫菜蛋汤")
    
            val desc = menu.reduce{s1,s2->s1+","+s2}
            println("我会$desc")
        }
    }
    
    
    //类的主要特点:可以被继承,但要标记为开放类(可见性修饰符:open)
    //写法:(class 子类:父类),然后可以用编辑器自动补全构造器
    //子类获得父类所有能力,同时可发展多样性
    
    class Shanghaiin2(sex:Boolean,region:String="sh"): Chinese2(sex,region) {
        var dialect = "我港吴侬软语"
        override var skin="shanghaiYellow"
        protected var city = "ShangHai"
    }
    //子类方法加成
    class Sichuanwa2(sex: Boolean,region: String):Chinese2(sex,region){
        override fun cook() {
            super.cook()
            val menu = arrayOf("麻婆豆腐","重庆毛血旺","诸葛烤鱼")
            val desc = menu.reduce{ s1, s2 -> s1 + "," + s2 }
            println("我还会${desc}")
        }
    }
    
    fun main(args: Array<String>) {
        //实例化一个类
        val obm = Shanghaiin2(true)
        obm.avgSalary=3000
        println(obm.region)
        println(obm.dialect)
        obm.cook()
    
        val pj =Sichuanwa2(true,"tw")
        pj.avgSalary=2000
        println(pj.region)
        pj.cook()
    }
    
    
    

    出自:http://www.xiaoboswift.com/course/54

    相关文章

      网友评论

          本文标题:17.面向对象

          本文链接:https://www.haomeiwen.com/subject/fllnvxtx.html