zoukankan      html  css  js  c++  java
  • 类 kotlin(13)

    Kotlin 中使用关键字 class 声明类
    class Invoice {
    }


    类声明由类名、类头(指定其类型参数、主 构造函数等) 和由大括号包围的类体构成。类头
    和类体都是可选的;
    如果一个类没有类体,可以省略花括号。
    class MyClass

    构造函数
    在 Kotlin 中的一个类可以有一个主构造函数和一个或多个次构造函数。主 构造函数是类头的
    一部分:它跟在类名(和可选的类型参数) 后。

     关键字class +类名+构造函数关键字constructor+(参数)

    如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。
    class Person(firstName: String) {
    }

    主构造函数不能包含任何的代码。
    初始化的代码可以放 到以 init 关键字作为前缀的初始化块(initializer blocks) 中:
    class Customer(name: String) {
      init {
        logger.info("Customer initialized with value ${name}")
      }
    }
    事实上,声明属性以及从主构造函数初始化属性,Kotlin 有简洁的语法:
    class Person(val firstName: String, val lastName: String, var age: Int) {
    // ……
    } 没看明白,在构造方法声明的参数,属于类属性吗??????????????

    构造方法的参数声明中 val 可以省略,如果不写默认val ;

    证明上面的理解是对的。构造方法的参数就是类的属性。val声明就是不可变,var是可变。很奇葩!

    与普通属性一样,主构造函数中声明的属性可以是 可变的(var ) 或只读的(val ) 。
    如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且 这些修饰符
    在它前面:
    class Customer public @Inject constructor(name: String) {

      ……

    }

    次构造函数
    类也可以声明前缀有 constructor 的次构造函数:
    class Person {
    constructor(parent: Person) {
    parent.children.add(this)
    }
    }
    如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过
    别的次构造函数间接委托。委托到同一个类的另一个构造函数 用 this 关键字即可:
    class Person(val name: String) {
    constructor(name: String, parent: Person) : this(name) {
    parent.children.add(this)
    }
    }
    如果一个非抽象类没有声明任何(主或次) 构造函数,它会有一个生成的 不带参数的主构造
    函数。构造函数的可见性是 public。如果你不希望你的类 有一个公有构造函数,你需要声明
    一个带有非默认可见性的空的主构造函数:
    类和继承
    class DontCreateMe private constructor () {
    }
    注意:在 JVM 上,如果主构造函数的所有的参数都有默认值,编译器会生成 一个额外
    的无参构造函数,它将使用默认值。这使得 Kotlin 更易于使用像 Jackson 或者 JPA 这样
    的通过无参构造函数创建类的实例的库。
    class Customer(val customerName: String = "")
    {:.info}

     创建类的实例
    要创建一个类的实例,我们就像普通函数一样调用构造函数:
    val invoice = Invoice()
    val customer = Customer("Joe Smith")
    注意 Kotlin 并没有 new 关键字。
    创建嵌套类、内部类和匿名内部类的类实例在嵌套类中有述。

    类成员
    类可以包含
    构造函数和初始化块
    函数
    属性
    嵌套类和内部类
    对象声明





  • 相关阅读:
    [erlang] Erlang继承(inheritance)
    [python]python 动态调用模块&类&方法
    [mysql]将mysql输入内容保存文件
    [erlang] Erlang TCP(gen_tcp)
    hdu 3350 #define is unsafe && hdu3328 Flipper
    hdu 1690 Bus System
    hdu 1401 Solitaire (双向广搜)
    hdu3172 Virtual Friends (并查集+字典树)
    hdu1426 Sudoku Killer
    hdu3111 Sudoku (精确覆盖解数独 DLX)
  • 原文地址:https://www.cnblogs.com/mamamia/p/8399283.html
Copyright © 2011-2022 走看看