kotlin类

使用class关键字声明类,查看其声明格式:

:modifiers("class"|"interface") SimpleName
 typeParameters?
 primaryConstructor?  
(":"annotations delegationSpecifier{","})?
typeConstraints(classBody? | enumClassBody)

modifiers

包括classModifieraccessModifier:

classModifier:类属性修饰符,标示类本身特性

//抽象类标示
abstract
//标示类不可继承,默认属性
final
//标示类为枚举
enum
//类可继承,类默认是final的
open
//注解类
annotation

accessModifier:访问权限标识符

//仅在同一个文件中可见
private
//同一个文件中或子类可见
protected
//所有调用的地方都可见
public
//同一个模块中可见
internal

类的声明

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

class Empty

构造函数

可以包含一个主构造函数和一个或者多个次构造函数。主构造函数是类头的一部分,它跟在类名(和可选的类型参数)后。

class Person constructor(firstName: String){
}

如果主构造函数有任何注解或者可见性修饰符,需要增加constructor关键字

class Person public @Inject constructor(firstName: String){
}

1:主构造函数(Primary constructor)

主构造函数不能包含任何的代码,初始化的代码可以放到以 init 为前缀的初始化块(initializer blocks)中:

1.1:声明:

作为类声明的头部存在,类声明结构如下:

class Person constructor(name: String){
}

当constructor前无修饰符如(private)时,可以省略constructor

class Person(name: String){
}

当是无参构造函数时,整个构造函数部分也可以省略,省略的构造函数默认是public的:

class Person{
}

1.2:初始化

由于primary constructor不能包含任何代码,因此使用 init 代码块进行初始化,同时可以在代码块中使用构造函数的参数:

class Person(name: String){
    init {
       // 初始化...
    }
}

可以类中初始化属性:

class Person(name: String){
    var customName = name.toUpperCase()
}

2:次构造函数(Secondary Constructor)

2.1:声明

使用constructor进行声明,必须调用主构造函数(Primary Constructor),使用this关键字:

/**
 * Primary constructor
 */
class Person(name: String) {

    // secondary constructor
    //使用constructor前缀声明,且必须调用primary constructor,使用this关键字:
    constructor(name: String,age: Int) :this(name) {
        //初始化...
    }
}

需要注意的地方:声明构造函数时,允许指定参数默认值,若所有参数都被指定默认值然后编译,编译器会生成一个额外的无参构造函数来使用初始化属性为初始值。

class User(name: String="") {
}

若构造函数中并非所有参数都有默认值,则不会生成默认无参构造函数:

class User(name: String="", age: Int) {
}

3:实例化

无需new关键字,即可实例化对象:

var User = User()

你可能感兴趣的:(kotlin类)