鱼C论坛

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

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

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

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

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

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

这个类如何使用呢,下面先给他加点属性:
  1. fun main(args: Array<String>) {
  2.     class People(var walk:String,var talk:String)
  3.     val p=People("走路","说话")
  4.     println(p.walk)
  5.     println(p.talk)
  6. }
复制代码

把他实体化的时候同样也要初始化一下他的属性,如果在类里面已经初始化好了,也可以不初始化,如:
  1. fun main(args: Array<String>) {
  2.     class People(var walk:String="走路",var talk:String="说话")
  3.     var p=People()
  4.     println(p.walk)
  5.     println(p.talk)
  6. }
复制代码
以上两种输出结果都一样,为:
走路
说话

类里面也可以有方法,其实就是类里面的函数,如:
  1. fun main(args: Array<String>) {
  2.     class People(var walk:String="走路",var talk:String="说话"){
  3.         fun doHomework(){
  4.             println("正在做家务")
  5.         }
  6.     }
  7.     var p=People()
  8.     p.doHomework()
  9. }
复制代码

输出结果为:
正在做家务

类也可以用于继承,比如聪明的电脑将来可以继承人类,人能干的活电脑也能干:
  1. fun main(args: Array<String>) {
  2.     open class People(var walk:String="走路",var talk:String="说话"){
  3.         fun doHomework(){
  4.             println("正在做家务")
  5.         }
  6.     }
  7.     class SmartComputer:People()
  8.     var p=SmartComputer()
  9.     p.doHomework()
  10. }
复制代码

不过类默认是不允许继承的,你要在前面加一个open关键字。输出结果为:
正在做家务

继承后还可以重写原来类的方法,比如:
  1. fun main(args: Array<String>) {
  2.     open class People(var walk:String="走路",var talk:String="说话"){
  3.         open fun doHomework(){
  4.             println("正在做家务")
  5.         }
  6.     }
  7.     class SmartComputer:People(){
  8.         override fun doHomework(){
  9.             println("我是电脑,我在帮主人做家务")
  10.         }
  11.     }
  12.     var p=SmartComputer()
  13.     p.doHomework()
  14. }
复制代码

被重写的那个方法也必须是open的才能被重写,输出结果为:
我是电脑,我在帮主人做家务

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

  7.     var p=People<String>("走路","说话")
  8.     var f=People<Int>(1,2)
  9.     println(p.walk)
  10.     println(f.walk)
  11. }
复制代码

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

  3.         var b:Int?= null
  4.         init {
  5.             b=a
  6.         }
  7.     }
  8.     println(People().b)
  9. }
复制代码

输出结果为:
1

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 00:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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