Learning Kotlin: 接口

interface

1
2
3
4
5
6
7
8
9
interface DemoInterface {
//抽象方法的声明
fun bar()

//声明及实现
fun foo() {
//可选的方法体
}
}

接口无法保存状态。它可以有属性但必须声明为抽象或提供访问器实现。

接口中的属性

Learning Kotlin: 属性与字段

var

val

1
2
3
var <propertyName>[: <PeopertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
1
2
3
var example: String 
get() ...
set(value) {...}

幕后字段:(还有幕后属性,起了个临时变量的作用吧?)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package app.classes

class BackingFields {
var counter = 0
set(value) {
if (value >= 0) field = value
}
}

fun main() {
var backingFields = BackingFields()
println("backingFields.counter = ${backingFields.counter}")
backingFields.counter = 1
println("backingFields.counter = ${backingFields.counter}")
var backingFields2 = BackingFields()
backingFields2.counter = -1
println("backingFields.counter = ${backingFields2.counter}")
}
1
2
3
backingFields.counter = 0
backingFields.counter = 1
backingFields.counter = 0

Learning Kotlin: 类与继承

类布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package app

...

class Demo constructor(str: String) {
// 属性声明与初始化
val ...
var ...

init {

}

// 次构造函数
constructor(...) {...}

// 方法声明
fun ... {...}

// 伴生对象
companion object {}
}

类成员:

  • 构造函数与初始化块
  • 函数
  • 属性
  • 嵌套类与内部类
  • 对象声明

继承

超类 Anyequals(), hashCode(), toString().

资料:

N久之前,我在直播时承诺要讲的那个Kotlin括号的问题

Learning Kotlin: 控制流 - for

1
2
3
4
5
6
7
8
9
10
11
package app

fun main() {
//for

val arrs = arrayOf(1, 2, 3)

for (item in arrs) {
println(item)
}
}

for 可以循环遍历任何提供了迭代器的对象:

  • 有一个成员函数或者扩展函数 iterator, 它的返回类型
  • 有一个成员函数或者扩展函数 next() ,并且
  • 有一个成员函数或者扩展函数 hasNext() 返回 Boolean.

这三个函数都需要标记为 operator

Learning Kotlin: 控制流 - when

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package app

fun main() {
val a = 2

//when
when (a) {
1 -> println("x == 1")
2 -> println("x == 2")
else -> {
println("x is neither 1 nor 2")
}
}

// when 既可以被当做表达式使用也可以被当做语句使用。

fun hasPrefix(x: Any) = when (x) {
is String -> x.startsWith("prefix")
else -> false
}

val prefixString = "prefixString"
println("$prefixString is start with 'prefix' = ${hasPrefix(prefixString)}")
}