kotlin学习(四):面向对象,集合

学习笔记

1,智能类型转换

fun call(animal:IAnimal){
    //判断传递的具体子类类型 转换成子类型
    if(animal is IDog){                      //is 相当于java的instanceof
//        val newDog = animal as IDog       //as相当于java的强制类型转换
        animal.wangwang()              //在判断时,已经自动强转
    }else if(animal is ICat){
//        val newCat = animal as ICat
        animal.miaomiao()
    }
}

2,构造函数和次构函数

class Person1(name:String,age:Int) {    //主构函数
    //定义次构函数
    constructor(name:String,age:Int,phone:String) : this(name, age)   //次构必须调用主构函数
}

3,泛型

open class Box<T>(var thing:T)

//子类继承Box
class SonBox(thing:Int): Box<Int>(thing)

4,中缀表达式
1,在类的函数加上infix关键字
2,函数参数只能有一个

//不需要点,直接调用
person hello  "张三"

class Person{
    infix fun hello(name: String){
      println("hello $name")  
    }
}

5,类的委托方式一

//通过关键字 by 委托其去实现
interface WashPower1{
      fun wash()
    }

//大头儿子已经具备了洗碗能力
class Son1: WashPower1{
      override fun wash(){
          println("大头儿子洗碗了")
        }
  }

//小头爸爸 可以把洗碗能力委托给大头儿子实现 ,所以小头爸爸不需要是实现洗碗的方法
class SmallFather: WashPower1 by Son1(){
}

委托方式二

class SmallFather(var son:Son) : WashPower by son

6,延迟加载 当用到时候才会加载 只会加载一次 并且是线程安全的

val lazyValue :String by lazy{
      println("")  //lazy初始化
      "张三"   //最后一行返回
  }
```

7,扩展函数 ,可以代替java中的各种utils
```
//不需要定义新的对象就可以添加新的函数
//判断字符串是否为空
fun String.isEmpty(){
  if(this == null || this.length == 0){
    println("为空")
  }  
}
```

8,单例 object关键字代替class
```
//单例
object Data{
    var name = "张三"
    fun sayHello(){
      println("hello $name")  
    }
  }

//直接使用,不可用new
Data.sayHello()

```
9,实现像java一样的单例
```
//1,私有构造函数
//2,私有并静态对象引用
//3,提供静态方法获取引用属性
class Single private constructor(){
   //私有构造函数
   companion object{
        //延迟加载
         val single: String by lazy{
               Single() 
            }
      }
  }
```

10,半生对象,可以直接访问,类似java的static
```
class MyData{
   var age = 20 //需要创建对象访问
   companion object{  //半生对象,可以直接访问
        var name = "张三"  
    }

//方式二
companion objext InClass{
  
  }
  }
```
11,枚举: 一一列举
```
enum class Week{
   item1, item2, item3
  }
```

12,数据类bean, 在kotlin 中可以使用data class
```
//里面封装了java代码,get, set, hashcode, tostring,equals, copy, 构造函数
//component1, 代表第一个参数 time
data class Sms(var time:Long, var content: String, var from:String)
```

13,list集合
```

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,356评论 9 118
  • 面试必背 会舍弃、总结概括——根据我这些年面试和看面试题搜集过来的知识点汇总而来 建议根据我的写的面试应对思路中的...
    luoyangzk阅读 11,773评论 6 173
  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 13,277评论 0 45
  • 人这一生,有两种样子。 一种是:想要成为的 一种是:你成为的 小的时候我们总想成为科学家,成为抓坏人的小偷。但是大...
    一一KK阅读 1,774评论 0 0
  • 我只有远远地见过你一次,我知道你生活在跟我一样的世界里,每当想起这个我便觉得幸福。 早上出门时挤公交是一天浩劫的开...
    藤子的猫阅读 2,532评论 0 0