美文网首页
Kotlin 类和对象

Kotlin 类和对象

作者: 提丶米 | 来源:发表于2018-09-10 08:30 被阅读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
}

接口类

数据类

相关文章

  • Kotlin 类和对象(下)object对象的分析

    前言 Kotlin 类和对象 系列 Kotlin 类和对象(上)类的分析[https://www.jianshu....

  • Kotlin 类和对象(上)类的分析

    前言 Kotlin 类和对象 系列 Kotlin 类和对象(上)类的分析[https://www.jianshu....

  • Kotlin 类、对象和接口(三)——编译器生成的方法:数据类和

    Kotlin 类、对象和接口(一)——定义类继承结构Kotlin 类、对象和接口(一)——定义类继承结构 Java...

  • 类和对象

    Kotlin 类和对象类定义Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。Kot...

  • Kotlin从入门到放弃(五) 类和对象

    Kotlin从入门到放弃(五) 类和对象 本篇主要记录Kotlin对类和对象的具体用法,实现类的继承和定义特殊的...

  • Kotlin 类和对象

    类的定义 Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。Kotlin 中使用关键...

  • Kotlin 类和对象

    Kotlin 类可以包含:构造函数和初始化代码块(init)、函数、属性、嵌套类和内部类、对象声明 1.使用关键字...

  • Kotlin 类和对象

    类定义 同Java一样,一个类可以具有以下: 函数 主构造函数 主构造器是类头部的一部分,位于类名称之后. 如果主...

  • Kotlin 类和对象

    原文地址:Kotlin 类和对象 一、类定义 Kotlin 类可以包含:构造函数、初始化代码块、函数、属性、内部类...

  • Kotlin 类和对象

    类定义 Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。Kotlin 中使用关键字...

网友评论

      本文标题:Kotlin 类和对象

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