Kotlin类:功能更强、而更简洁(KAD 03)

作者:Antonio Leiva

时间:Dec 7, 2016

原文链接:http://antonioleiva.com/classes-kotlin/

 

 

Kotlin类尽可能简单,这样用较少的代码完成更多的逻辑。

 

我将快速展示怎样开始编写Kotlin类,它不同于Java类。

 

1、类声明

1 class Person

 

只需用保留字class 加 类名。如果类里没有代码,大括号“{}”都不需要。

 

说明:是否看见它没有用public修饰符吗?这是因为在Kotlin中所有都时默认为public。

 

2、添加属性

 

在Kotlin中,不存在域(或者至少你不需要声明它们)。类有属性。

 

为了简单,属性替换Java域+getter+setter。这样,为我们的类来声明一对属性:

1 class Person {
2     var name = "Name"
3     var surname = "Surname"
4 }

 

如果你要写setter,当然可以声明它:

1 var name = "Name"
2     set(value) {
3         name = "Name: $value"
4     }

 

说明:如你所见,你可以直接转化变量为字符串(),而不用String.format。

 

你是否注意到这可节省一定数量的代码吗?所有的setter和getter都直接写出。

 

3、添加构造函数

 

通常,每个类仅需要一个构造函数。但在后续文章中,你能看到可以添加多个构造函数。

 

如仅有一个构造函数,编写它的方法可以简化很多:

1 class Person(val name: String, val surname: String)

 

这会发生什么?

  1. 属性消失了?事实上,它们仍在那里。但是,如果构造函数的自变量是由var或val说明,这些属性就这行中同时创建了。
  2. 在类定义之后直接编写构造函数。你不需要额外创建方法和为属性赋值。

 

4、现在可以在类内部创建函数

 

接着,如你希望的那样,在内部使用属性:

1 class Person(val name: String, val surname: String) {
2     fun getFullName() = "$name $surname"
3 }

 

如上列所示,当数值是直接分配时,函数可以用简约的方式编写。但是,仍然可以用“旧式”Java方法编写:

1 fun getFullName(): String {
2     return "$name $surname"
3 }

 

在这种情况下,你需要定义返回类型。

 

5、Kotlin中默认设置是关闭

 

所以不能被扩展,并且子类(在类扩展情况下)不能重载父类函数,除非类用保留字open指明:

1 open class Person(val name: String, val surname: String)
2 class Cop(surname: String) : Person("Mr", surname)

 

看到父类构造函数是怎样被调用的吧。简单清晰!

 

结论

 

在这篇文章中,你已经见到Java类和Kotlin类之间的一些不同之处。如何你要了解更多,我建议你订阅接收我为你准备的一组文章。

 

posted @ 2016-12-08 20:49  figozhg  阅读(602)  评论(0编辑  收藏  举报