zoukankan      html  css  js  c++  java
  • Kotlin 面向对象

    一、 类

    Kotlin没有new关键字

    默认修饰符是public

    二、属性

     1.

    fun main() {
        var a=A()
        println(a.name)
        println("===========")
        a.name="liu"
    }
    
    class A{
        //只读
        val age  get() = 10
        //
        var name ="tom"
        get() {
          println("调用name get属性")
            return field
        }
        set(value){
            println("调用name set属性")
            field=value
        }
    }

     

     2.延迟初始化

    可以在使用时,再分配内存空间

    (1)

    private lateinit var name: String

    (2)

    val name: Int by lazy { 1 }

    三、构造方法

    1.默认构造参数减少构造函数重载

    fun main() {
        val stu1 = Student()
        val stu2 = Student(age = 20)
        val stu3 = Student(name = "lili")
        val stu4 = Student(age = 16, name = "lili")
    }
    //默认赋值
    class Student(val age:Int=18,var name:String="tom"){
    
    }

    2.var val

    如果类构造函数前没有使用var val,则它不会自动赋值给属性

    没有带var val 的参数名,只能在init中使用

    3.init语句块

    创建对象时会自动执行init, init可以有多个

    fun main() {
        val stu1 = Student()
    }
    class Student(val age:Int=18,var name:String="tom"){
        init {
            println(age)
        }
        init {
            println(name)
        }
    }

    4.次要构造方法

    在类上定义的构造方法是主要构造,在类里定义的叫次要构造。

    次要构造必须加上  constructor

    fun main() {
        val stu1 = Student(18,"")
    }
    class Student  (){
        constructor(age:Int,name: String) :this (){
    
        }
    }

    次要构造必须调用主要构造

    fun main() {
        val stu1 = Student(18,"Tom","852")
    }
    class Student  (age:Int){
        init {
            println(age)
        }
        constructor(age:Int,name: String) :this (age){
            println(name)
        }
        constructor(age:Int,name: String,code:String) :this (age,name){
            println(code)
        }
    }

    四、继承

     1.类默认下不能被继承

    想要继承需要父类使用open关键字

    fun main() {
        val stu1 = Student1(18)
    }
    open class Student  (age:Int){
        init {
            println(age+1)
        }
    }
    class Student1(age:Int):Student(age){
    
    }

     2.super

    如果子类没有主构造,则次构造使用super继承父类

    fun main() {
        val stu1 = Student1(18)
    }
    open class Student  (age:Int){
        init {
            println(age+1)
        }
    }
    class Student1:Student{
        constructor(age:Int):super(age){
        }
    }

    如果继承了多个类和接口,并且他们又相同得方法名 

    interface  A {
        fun test(){
            print("A")
        }
    }
    
    class B{
        fun test(){
            print("B")
        }
    }
    
    class C:A{
      override  fun test(){
            super<A>.test()
        }
    }

    3.重写父类方法

    父类方法需要加open,并且子类加override 

    open class Student  () {
        open fun test() {
            println("父类")
        }
    }
    class Student1:Student() {
        override fun test() {
            println("父类")
        }
    }

    4.final

    五、接口

    1.接口方法内可以实现

    fun main() {
        B().test()
    }
    interface  A {
        fun test(){
            print("OK")
        }
    }
    class B:A{
    
    }

    2.

    六、抽象类

    七、伴生对象

    Kotlin中不存在静态得概念,可以使用 companion object {} 

    fun main() {
        println(A.a)
        A.test()
    }
    
    class A{
        companion object {
            val a=10
            fun test(){
                print("fun")
            }
        }
    }

    一个类中只允许定义一个伴生对象

    编译器给 companion object 默认加上一个名字companion

    编译后

    八、扩展

    fun main() {
        A().test2()
    }
    class A{
        fun test1(){
            println("test1")
        }
    }
    fun A.test2(){
        println("test2")
    }

    九、多态

    十、数据类

     主构造至少要有一个参数

    所有得主构造参数都必须要有 var或者val

    数据类不能是抽象的,open的、sealed的、inner的

    fun main() {
        var a=A(18,"tianjin")
        print(a)
    }
    
    data class A(var age:Int,val address:String)

    十一、密封类

    限制只能传入子类

     

    十二、嵌套类、内部类

  • 相关阅读:
    css控制textarea固定大小不可拖动
    js绑定回车事件
    这一周的收获与总结_BP
    20140824
    【转】Hadooop学习笔记
    【转】CUDA优化小记录
    【转】CUDA程序优化要点
    cublas 矩阵相乘API详解
    CUDA 矩阵相乘完整代码
    CUDA 矩阵相乘
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12611482.html
Copyright © 2011-2022 走看看