美文网首页
kotlin学习(四):面向对象,集合

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

作者: 8ba406212441 | 来源:发表于2018-08-30 16:52 被阅读7次

    学习笔记

    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学习(四):面向对象,集合

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