阅读本篇你可以收获 Kotlin 类,函数,以及扩展函数的使用:
类定义:
接着上一篇的代码开始创建一个类,跟java 中相同需要使用 class 关键字,同样有一个默认的构造器
class Person{}
当需要自定义构造器时,构造函数的函数体你可以写在 init 块中:
class Person(name:String,age:Int){
init{
// 构造器的函数体
}
}
类继承:
默认任何类都是基础继承自 Any (与java中的 Object 类似)在 Kotlin 中所有的类默认都是不可继承的(final),所以我们只能继承那些明确声明 open 或者 abstract 的类,继承的方式通过 ‘:’ 来实现
open class Animal(name: String)
class Person(name:String,age:Int) : Anumal(name)
上方的代码可以看到,通过 open 设置类的权限,在Person 继承时,直接使用了自身构造器的 name 传递给了父构造器,当我们只有单个构造器时,我们需要在从父类继承下来的构造器中指定需要的参数。这是用来替换Java中的 super 调用的。
类的调用:
val p = Person() // 不需要使用new关键字,直接类名() 就可以得到实例
函数(java 中的方法):
可以使用 fun 关键字定义
fun onCreate(){}
如果你没有指定它的返回值,它就会返回 Unit ,与Java中的 void 类似,但
是 Unit 是一个真正的对象。你当然也可以指定任何其它的返回类型:
fun onCreate() : Int {
return 1
}
如果返回的结果可以使用一个表达式计算出来,你可以不使用括号而是使用等号:
fun onCreate() :Int = 1+3
我们还可以给参数指定一个默认值使得它们变得可选
fun add(a:Int,b:Int = 10){ // 此处b的默认值就为10 }
如你所见,第二个参数(b)指定了一个默认值。这意味着你调用的时候可以传入第二个值或者不传,这样可以避免你需要的重载函数
函数的重写
override fun add(){}
在重写时添加关键字 override 并且被重写的方法必须是 open/ abstract 修饰的,与类一样函数默认也是final
扩展函数的使用:
Kotlin的扩展函数功能使得我们可以为现有的类添加新的函数,而不用修改原来的类。在使用前首先要配置一下Anko 类库,在你的Gradle 中添加(sync Now):
compile 'org.jetbrains.anko:anko-sdk21:0.8.3'
compile 'org.jetbrains.anko:anko-support-v4:0.8.3'
compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3'
我们现在为一个activity添加一个新函数,用于显示一个toast:
fun Activity.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT){
Toast.makeText(this, message, duration).show()
}
声明一个扩展函数很简单,只需要在函数名之前添加指定的类名即可。在调用时,该函数会以导入的方式添加到这个类中。并且我们可以在任何地方声明扩展函数比如在你的Util包中,定义完扩展函数我们就可以在任何Activity,或其子类中使用该方法(我们例子中是为Activity添加的扩展函数,要注意扩展函数并不是真正地修改了原来的类,它是以静态导入的方式来实现的。它可以被声明在任何文件中,因此有个通用的实践是把一系列有关的函数放在一个新建的文件里) 调用也很简单,在Activity中,跟调用普通方法一样:
toast("这样写就能Toast")
所有的Kotlin文章都是在学习过程中的一个记录,有不对的地方欢迎拍砖指正!!
下一篇:从API中获取数据,发起一次简单请求!!
http://www.jianshu.com/p/dabd77970e28