当前位置 : 主页 > 手机开发 > android >

Android Kotlin全面详细类使用语法学习指南

来源:互联网 收集:自由互联 发布时间:2023-02-01
目录 前言 1. 类的声明 实例化 2. 构造函数 2.1 主构造函数 2.2 次构造函数 3. 类的属性 4. 可见性修饰符 5. 继承 重写 6. 特殊类 6.1 嵌套类(内部类) 6.2 接口 6.3 数据类 6.4 枚举类 总结 前
目录
  • 前言
  • 1. 类的声明 & 实例化
  • 2. 构造函数
    • 2.1 主构造函数
    • 2.2 次构造函数
  • 3. 类的属性
    • 4. 可见性修饰符
      • 5. 继承 & 重写
        • 6. 特殊类
          • 6.1 嵌套类(内部类)
          • 6.2 接口
          • 6.3 数据类
          • 6.4 枚举类
        • 总结

          前言

          Kotlin被Google官方认为是Android开发的一级编程语言

          今天,我将主要讲解kotlin中的类的所有知识,主要内容包括如下:

          1. 类的声明 & 实例化

          // 格式
          class 类名(参数名1:参数类型,参数名2:参数类型...){
                          // to do 
          }
          // 示例
          class User(userName: String, age: Int){
                         // to do 
          }
          // 实例化
          // Kotlin没有new关键字,所以直接创建类的实例(无参情况 & 有参):
          var user = User()
          var user = User("ABC" , 123)
          // 额外说明:Kotlin支持默认参数
          // 即在调用函数时可不指定参数,则使用默认函数
          class User(userName: String = "hjc", age: Int = 26){
                        // to do 
          }
          // 在实例化类时不传入参数,userName默认 = hjc,age默认 = 26
          var user = User()
          // 在设置默认值后,若不想用默认值可在创建实例时传入参数
          var user = User("ABC" , 123)
          // 注:命名参数
          若一个默认参数在一个无默认值的参数前,那么该默认值只能通过使用命名参数调用该函数来使用
          class User(userName: String = "hjc", age: Int){
              // to do 
          }
          var user = User(age = 26)

          对于构造函数,Kotlin中类可有一个主构造函数 & 多个次构造函数,下面将详细说明。

          2. 构造函数

          2.1 主构造函数

          • 属于类头的一部分 = 跟在类名后,采用 constructor 关键字
          • 不能包含任何的代码。初始化的代码放到以 init 关键字作为前缀的代码块中
          class 类名 constructor(参数名:参数类型){
          	init {       
              //...
              }
          }
          // 示例
          class User constructor(userName: String) {
          	init {       
              //...
              }
          }
          // 注:若主构造函数无任何注解 / 可见性修饰符,可省略 constructor 关键字
          class 类名(参数名:参数类型){
          	init {       
              //...
              }
          }
          // 示例
          class User (userName: String) {
          	init {       
              //...
              }
          }

          2.2 次构造函数

          • 必须加constructor关键字
          • 一个类中可存在多个次构造函数,传入参数不同
          // 形式
          constructor(参数名:参数类型) :{函数体}
          // 示例
          class User(userName: String) {
              // 主构造函数
              init {
                  println(userName)
              }
              // 次构造函数1:可通过this调主构造函数
              constructor() : this("hjc")
              // 次构造函数2:可通过this调主构造函数
              constructor(age: Int) : this("hjc") {
                  println(age)
              }
              // 次构造函数3:通过this调主构造函数
              constructor(sex: String, age: Int) : this("hjc") {
                  println("$sex$age")
              }
          }
          // 实例化类
          User("hjc") // 调用主构造函数
          User()      // 调用次构造函数1
          User(2)     // 调用次构造函数2
          User("male",26) // 调用次构造函数3

          3. 类的属性

          Kotlin的类可以拥有属性:关键字var(读写) / 关键字val(只读)

          class User {
              var userName: String
              val sex: String = "男"
          }
          // 使用属性 = 名称 + 引用
          User().sex  // 使用该属性 = Java的getter方法
          User().userName = "hjc"  // 设置该属性 = Java的setter方法

          4. 可见性修饰符

          5. 继承 & 重写

          • 类似于Java,Kotlin是单继承 = 只有一个父类
          • 区别:Kotlin使用冒号“ : ”继承 & 默认不允许继承(若想让类可被继承,需用open关键字来标识)
          // 用open关键字标识该类允许被继承
          open class Food 
          // 类Fruits继承类Food
          class Fruits : Food()
          • 对于子类重写父类的方法,在Kotlin中,方法也是默认不可重写的
          • 若子类要重写父类中的方法,则需在父类的方法前面加open关键字,然后在子类重写的方法前加override关键字
          // 父类
          // 在类 & 方法前都加了关键字open,为了被继承 & 方法重写
          open class Food {
              open fun banana() {}
          }
          // 子类 
          class Fruits : Food(){
          	// 重写了父类的方法
              override fun banana() {
                  super.banana()
              }
          }

          6. 特殊类

          下面将讲解一些特殊的类:

          • 嵌套类(内部类)
          • 接口
          • 数据类
          • 枚举类

          6.1 嵌套类(内部类)

          /**
           * 1. 嵌套类(内部类)
           * 标识:关键字inner
           * 使用:通过外部类的实例调用嵌套类
           */
           class User {
              var age: Int = 0
              inner class UserName {
              }
          }
          var userName: User.UserName  = User().UserName()

          6.2 接口

          /**
           * 2. 接口
           * 标识:关键字interface
           */
          // 声明
          interface A{}
          interface B{}
          // 方法体
          // 接口中的方法可以有默认方法体,有默认方法体的方法可不重写
          // 区别于Java:Java不支持接口里的方法有方法体。
          interface UserImpl{
              fun getName(): String // 无默认方法体,必须重写
              fun getAge(): Int{    // 有默认方法体,可不重写
                  return 22
              }
          }
          // 实现接口UserImpl:需重写getName() & 可不重写getAge()
          class User :UserImpl{
              override fun getName(): String {
                  return "hjc"
              }
          }
          // 实现接口:冒号:
          class Food : A, B {} // Kotlin是多实现
          class Fruits: Food,A, B {} // 继承 + 实现接口

          6.3 数据类

           /**
            * 3. 数据类
            * 作用:保存数据
            * 标识:关键字data
           */
          // 使用:创建类时会自动创建以下方法:
          //      1. getter/setter方法;
          //      2. equals() / hashCode() 对;
          //      3. toString() :输出"类名(参数+参数值)";
          //      4. copy() 函数:复制一个对象&改变它的一些属性,但其余部分保持不变
          // 示例:
          // 声明1个数据类
          data class User(var userName: String, var age: Int)
          // copy函数使用
          var user = User("hjc",26)
          var user1 = user.copy(age = 30)
          // 输出user1.toString(),结果是:User(userName=hjc,age=30)
          // 特别注意
          // 1. 主构造方法至少要有一个参数,且参数必须标记为val或var
          // 2. 数据类不能用open、abstract、sealed(封闭类)、inner标识

          6.4 枚举类

          /**
           * 4. 枚举类
           * 标识:关键字enum
           */
           // 定义
           enum class Color {
              RED, GREEN, BLUE
          }
          // 为枚举类指定值
          enum class Color(rgb: Int) {
              RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)
          }

          总结

          本文全面介绍了Kotlin语法中的类,更多关于Android Kotlin类语法的资料请关注自由互联其它相关文章!

          网友评论