美文网首页
类的进阶

类的进阶

作者: warmingood | 来源:发表于2018-05-17 15:49 被阅读0次

    1.继承

    需要被继承的类,类的方法,类的属性都要加open关键字

    // 父类没有构造需要的参数
    open class Person(){
      var name:String = ""
      var age:Int = 0
    }
    
    class Student():Person(){
      var school:String = ""
    }
    
    // 父类有需要构造的参数
    open class Person(var name:String, var age:Int){
      open fun showInfo(){
        print("hello")
      }
    }
    
    class Student(var name:String, var age:Int, var school:String):Person(name, age){
      override fun showInfo(){
        print("hello student")
      }
    }
    

    2.抽象类 重写 重载

    抽象类不能被实例化,需要子类去继承然后实现抽象方法,所以也不需要加open关键字

    abstract class News{
      var origin = "reporter"
      abstract var content:String
      abstract fun newsLength(): Int
    }
    
    class schoolNews:News(){
      override var content:String =""
      override fun newsLength():Int = content.length
    }
    

    重载:不同参数个数的重载
    重写:子类继承父类,重写父类的方法

    3.接口interface

    接口也不需要加open关键字

    interface USB{
      fun add()
      fun remove()
    }
    
    class Computer:USB{
      override fun add(){
        print("add")
      }
      override fun remove(){
        print("remove")
      }
    }
    
    

    补充

    属性代理
    // 属性代理就是将属性的get set都转移到定义的by后面的类里面
    // 如果属性val需要实现一个操作符getValue()方法,如果属性是var的话,就要实现getValue()和setValue()方法
    class delegates{
      val name by lazy{
        "minger"
      }
    }
    // lazy 和 lateinit都是延迟初始化
    // lazy只能用在val上,lateinit只能用在var上
    // lateinit不能用在可空类型和java基本类型上
    

    相关文章

      网友评论

          本文标题:类的进阶

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