Kotlin类:功能更强、而更简洁(KAD 03)
作者:Antonio Leiva
时间:Dec 7, 2016
原文链接:http://antonioleiva.com/classes-kotlin/
Kotlin类尽可能简单,这样用较少的代码完成更多的逻辑。
我将快速展示怎样开始编写Kotlin类,它不同于Java类。
1、类声明
class Person
只需用保留字class 加 类名。如果类里没有代码,大括号“{}”都不需要。
说明:是否看见它没有用public修饰符吗?这是因为在Kotlin中所有都时默认为public。
2、添加属性
在Kotlin中,不存在域(或者至少你不需要声明它们)。类有属性。
为了简单,属性替换Java域+getter+setter。这样,为我们的类来声明一对属性:
class Person { var name = "Name" var surname = "Surname" }
如果你要写setter,当然可以声明它:
var name = "Name" set(value) { name = "Name: $value" }
说明:如你所见,你可以直接转化变量为字符串(
),而不用String.format。
你是否注意到这可节省一定数量的代码吗?所有的setter和getter都直接写出。
3、添加构造函数
通常,每个类仅需要一个构造函数。但在后续文章中,你能看到可以添加多个构造函数。
如仅有一个构造函数,编写它的方法可以简化很多:
class Person(val name: String, val surname: String)
这会发生什么?
- 属性消失了?事实上,它们仍在那里。但是,如果构造函数的自变量是由var或val说明,这些属性就这行中同时创建了。
- 在类定义之后直接编写构造函数。你不需要额外创建方法和为属性赋值。
4、现在可以在类内部创建函数
接着,如你希望的那样,在内部使用属性:
class Person(val name: String, val surname: String) { fun getFullName() = "$name $surname" }
如上列所示,当数值是直接分配时,函数可以用简约的方式编写。但是,仍然可以用“旧式”Java方法编写:
fun getFullName(): String { return "$name $surname" }
在这种情况下,你需要定义返回类型。
5、Kotlin中默认设置是关闭
所以不能被扩展,并且子类(在类扩展情况下)不能重载父类函数,除非类用保留字open指明:
open class Person(val name: String, val surname: String) class Cop(surname: String) : Person("Mr", surname)
看到父类构造函数是怎样被调用的吧。简单清晰!
结论
在这篇文章中,你已经见到Java类和Kotlin类之间的一些不同之处。如何你要了解更多,我建议你订阅接收我为你准备的一组文章。