布局文件声明id之后,在Activity中不需要进行findviewbyid的操作,不需要声明控件,直接可以使用。不过需要在activity中import一下(android studio 一般会自动引入)。如
<TextViewandroid:id="@+id/message"android:text="@string/hello_world"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
在activity中直接可以使用message.text = "hello kotlin",这个时候android studio 一般会引入import语句,如果没有,需要手动引入:
import kotlinx.android.synthetic.main.activity_main.*
可以看到设置文字都不需要set这些方法,编译器自动转换为java代码。
类的定义
class MainActivity{ },它有一个默认唯一的构造器,但是请记住大部分情况下你只需要这个默认的构造器。你只需要在类名后面写上它的参数。如果这个类没有任何内容可以省略大括号:class Person(name: String, surname: String),那么构造函数的函数体在哪呢?你可以写在 init 块中:
class Person(name: String, surname: String) {
init{
...
}
}
类继承
默认任何类都是基础继承自 Any (与java中的 Object 类似,但是两者完全不同,尤其是,它除了 equals() 、 hashCode() 和 toString() 外没
有任何成员。),但是我们可以继承其它类。所有的类默认都是不可继承的(final),所以我们只能继承那些明确声明 open
或者 abstract 的类:
open class Animal(name: String)
class Person(name: String, surname: String) : Animal(name)
创建类的实例
Kotlin中没有New这个关键字,那么如何创建一个实例呢?很多简单,只需要像普通函数一样,调用构造函数即可。
val invoice = Invoice()
val customer = Customer("Joe Smith")
这样,就创建了实例。
属性和字段:
Kotlin的类可以有属性。 属性可以用关键字 var 声明为可变的,否则使用只读关键字 val 。
接口
接口的还是用interface关键词来定义。
interface MyInterface {
fun bar()
fun foo() {
// 可选的方法体
}
一个类或者对象可以实现一个或多个接口。
class Child : MyInterface {
override fun bar() {
// 方法体
}
泛型
class Box<T>(t: T) {
var value = t
} //实例的创建val box: Box<Int> = Box<Int>(1);
嵌套类和内部类
嵌套类:
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}}
val demo = Outer.Nested().foo() // == 2
内部类:
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}}
val demo = Outer().Inner().foo() // == 1
可以看到,内部类用了一个inner关键字,使用方式也有点不同,内部类持有一个外部类对象的引用。