Kotlin 类和对象

2018-09-10  本文已影响0人  提丶米

类的定义

  • Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。
  • Kotlin 中使用关键字 class 声明类,后面紧跟类名:
    class DemoClass{  // 类名为 DemoClass
    // 大括号内是类体构成
}
  • 当然我们也可以定义空类即没有类体
    class EmptyClass//默认什么都不添加

类的属性

  • 类的属性可以用关键字 var 声明为可变的,否则使用只读关键字 val 声明为不可变。
    class PropertyClass{
        var name: String =""
        var url: String ="abc"
        val age: Int=1
    }
  • 一个类只能有一个主构造函数以及多个次要构造函数,只有主构造函数可以写在类头中,其他的次级构造函数(Secondary Constructors)就需要写在类体中以constructor修饰。
  • 主构造函数的参数也是类的属性,它们默认属于类的公有字段,可以直接使用,如果你不希望别的类访问到这个变量即如下面例子中的 Person("firstName").firstName是不能够获取到其firstName的,所以可以用private修饰如:
      class Person constructor(private var firstName: String) {
        //firstNane 即主构造函数的参数也就是所说的属性
        //init {} 是如果有额外的代码段需要执行可以卸载 init 中
        init {
            println(firstName)
            }
  
        fun print() {
            println(firstName)
            }
        //次构造函数 用constructor修饰
        //二级构造函数中的参数1(name),是委托了主构造函数的参数firstName。
        constructor(name: String, age: Int) : this(name)
        }

        //调用
        fun main(args: Array<String>) {
            /**
             * 初始化直接打印输出 firstName
             */
           Person("firstName")       //主构造函数 调用主函数只会调用init方法
           Person("firstName",10)    //次构造函数  可以有很多次构造函数,调用此函数不仅调用init方法还会调用次函数方法块
      }
  • 注意:可省略constructor的情况,1、在构造函数不具有注释符或者默认的可见性修饰符时,constructor关键字可以省略,2、默认的可见性修饰符时public。可以省略不写。
      //类似下面2种情况是不能省略的
      class Test private constructor(num: Int){
      }

      class Test @Inject constructor(num: Int){
      }
  • 注意:无论 主次构造函数的参数都可以设置默认值例如:
       class Person constructor(private var firstName: String="默认值") {
          init {
            println(firstName)
            }
        }
      fun main(args: Array<String>) {
          Person()//当参数有默认值的时候可以通过无参进行初始化      
        }
  • 同样的方法的参数也可以设置默认值
            fun newStudent(name: String, 
              age: Int= 18,
              sex: String= "男"){
                println("$name+是+$age+岁的+$sex+生!")
                }
           fun main(args: Array<String>) {
                //1、默认参数调用
                newStudent("鸣人")  
                //2、非默认参数调用
                newStudent("鸣人",20,"女")  
                //3、使用命名参数
                newStudent("鸣人",age=20,sex="女")  
        }

修饰符

  • private 修饰符,同一类或文件(针对包级别定义)中可见
  • opens 修饰符 ,Kotlin 默认会为每个变量和方法添加 final 修饰符,在 Kotlin 中默认每个类都是不可被继承的。如果你确定这个类是会被继承的,那么你需要给这个类添加 open 修饰符。
  • internal 修饰符,在 Kotlin 中,默认的访问权限是 public,模块级别的访问权限。
    何为模块(module),我们称被一起编译的一系列 Kotlin 文件为一个模块。在 IDEA 中可以很明确的看到一个 module 就是一个模块,当跨 module 的时候就无法访问另一个module 的 internal 变量或方法。
  • 注意:在Kotlin中,外层的类( outer class)不能访问内部类(inner classes)的private成员。

类的类别

  • Kotlin中的类可详细的分为:密封类、内部类(嵌套类)、抽象类、枚举类、接口类、数据类

密封类

  • 密封类是用来表示受限的类继承结构

内部类

抽象类

枚举类

  • 枚举类中的每一个枚举常量都是一个对象,并且他们之间用逗号分隔。
            /**
             * 例:关于一个网络请求结果的枚举类
             */
            enum class State{
            /*
             NORMAL : 正常
             NO_DATA : 数据为空
             NO_INTERNET : 网络未连接
             ERROR : 错误
             OTHER : 其他
             */

            NORMAL,NO_DATA,NO_INTERNET,ERROR,OTHER
}

接口类

数据类

上一篇 下一篇

猜你喜欢

热点阅读