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

2018-08-30  本文已影响7人  8ba406212441

学习笔记

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集合
```

```

上一篇 下一篇

猜你喜欢

热点阅读