鱼C论坛

 找回密码
 立即注册
查看: 3307|回复: 0

[技术交流] kotlin编程基础之类和对象(一)

[复制链接]
发表于 2017-11-18 10:01:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
类其实就是一个模板,一般要把它变成对象才能使用,就是实体化。例如:
fun main(args: Array<String>) {
    class People
    val p=People()
    print(p)
}
这里的class People就是建了一个人类的模板,下边People()就是给他实体化,然后再赋值给一个常量,这里输出一串没有任何意义的哈希值,输出为:
Class_objectKt$main$People@5e2de80c

这个类如何使用呢,下面先给他加点属性:
fun main(args: Array<String>) {
    class People(var walk:String,var talk:String)
    val p=People("走路","说话")
    println(p.walk)
    println(p.talk)
}
把他实体化的时候同样也要初始化一下他的属性,如果在类里面已经初始化好了,也可以不初始化,如:
fun main(args: Array<String>) {
    class People(var walk:String="走路",var talk:String="说话")
    var p=People()
    println(p.walk)
    println(p.talk)
}
以上两种输出结果都一样,为:
走路
说话

类里面也可以有方法,其实就是类里面的函数,如:
fun main(args: Array<String>) {
    class People(var walk:String="走路",var talk:String="说话"){
        fun doHomework(){
            println("正在做家务")
        }
    }
    var p=People()
    p.doHomework()
}
输出结果为:
正在做家务

类也可以用于继承,比如聪明的电脑将来可以继承人类,人能干的活电脑也能干:
fun main(args: Array<String>) {
    open class People(var walk:String="走路",var talk:String="说话"){
        fun doHomework(){
            println("正在做家务")
        }
    }
    class SmartComputer:People()
    var p=SmartComputer()
    p.doHomework()
}
不过类默认是不允许继承的,你要在前面加一个open关键字。输出结果为:
正在做家务

继承后还可以重写原来类的方法,比如:
fun main(args: Array<String>) {
    open class People(var walk:String="走路",var talk:String="说话"){
        open fun doHomework(){
            println("正在做家务")
        }
    }
    class SmartComputer:People(){
        override fun doHomework(){
            println("我是电脑,我在帮主人做家务")
        }
    }
    var p=SmartComputer()
    p.doHomework()
}
被重写的那个方法也必须是open的才能被重写,输出结果为:
我是电脑,我在帮主人做家务

类跟函数一样,都可以使用泛型,如:
fun main (args: Array<String>) {
    open class People<T> (var walk:T,var talk:T){
        open fun doHomework(){
            println("正在做家务")
        }
    }

    var p=People<String>("走路","说话")
    var f=People<Int>(1,2)
    println(p.walk)
    println(f.walk)
}
这里创建了两个对象p和f他们可以实体化不同类型的属性,输出结果为:
走路
1
属性也可以在init代码块里初始化,如:
fun main (args: Array<String>) {
    class People(a:Int=1){

        var b:Int?= null
        init {
            b=a
        }
    }
    println(People().b)
}
输出结果为:
1

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-7 08:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表