美文网首页
Kotin基本语法二

Kotin基本语法二

作者: 风卷残云啊 | 来源:发表于2023-01-16 18:32 被阅读0次

    第一章

    第一节:继承与重载和open关键字

    • 1、kotlin类默认是final 修饰的,所以无法继承,如果要想让别的类继承,要用open修饰,相当于去掉final
    • 2、kotin 所以方法默认是final修饰的,不能被重写,这和Java刚好相反,想要被继承就要在前面加open关键字

    第二节 kotin类型转换

    1、is 关键字。 A is B 相当于Java A instanceOf B
    2、A 强转成 B类,用 A as B

    第三节 kotlin Any类

    Any 是kotlin的超类,没有具体实现,在各个平台内部实现

    第四节 kotlin 对象的声明

    1、声明单例

        object KtTest{
            init{   }
            fun show() = println("我是单例")
       }
    
    fun main(){
        //KtTest 既是单例的实例,也是类名
        // 这就是典型的 单例
          print(KtTest)
           KtTest.show()
          //相当于 KtTest.INSTANCE.show()
       }
    
    

    2、匿名对象表达式

     open  class KtTest{
          open fun show{
            println("我是父类函数")
          }
       }
    
    fun main(){
        val p : KtTest = object : KtTest(){
        override fund show{
          println("我是子类函数")
                  }
           }
    
        p.show() //打印的是子类的输出 这就是匿名对象
    
    

    第五节 data 类

     class A(var name : String,var age: Int)
    
    data class A(var name : String,var age: Int)
      // data 类相当于JavaBean ,要比普通类更丰富 
     // data类有 get set  解构操作等
    

    第六节 copy函数

     class A(var name : String,var age: Int){
       var  sex;
        init{
                sex = 'M'
            }
      constructor(name:String):this(name,90){
       
           }
     }
    
    fun main(){
      var a = A("zhangsan",80)
      var b = a.copy("李四",20)
    // copy 只会调用主构造,不会调用次构造等,切记
    }
    \
    

    第二章

    第一节 接口的定义

      interface IUSB{
        var usbVersion : String
        var usbInertDevice : String
        fun insetUSB() : String
    }
    
    class Mouse(override var usbVersion :String = "USB3.0",override var usbInertDevice = "鼠标"):IUSB{
       override fun insetUSB():String = "我是鼠标"
    }
    

    接口的特点:

    • 1、接口里的所有成员和接口本身都是 public 和 open 的,所以不需要open,这是接口的特性
    • 2、接口没有构造
    • 3、实现类不仅要重写接口的函数,也要重新接口的成员
    • 4、接口实现代码区域,都要写override关键字来修饰

    第二节抽象类

      abstract  class BaseActivity{
       fun onCreate(){
       }
      abstract fun getLayoutId() : Int
    }
    
    class MainActivity : BaseActivity{
        override getLayoutId(){
      return 100;
       }
    }
    //Kotlin抽象类和Java的一模一样
    

    第三节 泛型

    泛型类

      class KtTest<T> (private val obj : T){
              fun show() = println("泛型类:$obj")
       }
    
     data class Student(val name : String, val age : Int)
    
     fun main(){
         val stu = Student("张三",60)
         KtTest(stu).show()
     }
    

    泛型 out 和 in

    out T 泛型前加 out表示只读 。默认情况下泛型子类对象不能赋值给泛型父类对象,但是加 out的泛型可以。
    int T 泛型前加 in表示不能被读取。int的特性刚好和out相反。

    • 协变:out 父类 = 子类
    • 逆变:in 子类 = 父类

    第四节 扩展函数

    class KtTest(name : String, age : Int)
    
    fun KtTest.show(){
    println("我是show函数:name:${name},age:${age}")
     }
    // KtTest.xxx   的内部都会持有 this ,这个类的当前对象,
    //**并且这个对Java的类同样有效**
    

    扩展函对Java类同样有效

    相关文章

      网友评论

          本文标题:Kotin基本语法二

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