这一节我们学习Kotlin的类和属性。
学习过Java的小伙伴对面向对象应该不会陌生吧。虽然说Kotlin支持直接在文件中写函数,但是它同样支持面向对象,下面就来了解一下Kotlin的类和属性相关的知识。
Kotlin的类
Kotlin中类的声明也是使用class
关键字,下面我们通过对你Java代码和Kotlin代码来学习。
Java代码
public class People {
private final String name;
public People(String name){
this.name = name;
}
public String getName() {
return name;
}
}
Kotlin代码
class People(val name: String)
你没有看错,就是这么简洁,对于我们常用的Java 的构造函数初始化成员变量,Kotlin直接省略了代码,默认支持。同时,Kotlin中默认的可见性是public
,所以此处省略了。
Kotlin的属性
在Java中我们经常会声明一个类,表示一个实体,然后在其中声明私有属性和对应的getter和setter方法,就如下面一样。
Java代码
public class People {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
我们看看Kotlin中的写法
Kotlin代码
class People {
var name: String? = null
var age: String? = null
}
是不是很简洁,上面的代码有如下几点需要注意。
1 . var
关键字表明这个变量是可变的,也就是可以反复赋值的。
2 . 声明格式是 关键字 变量名: 变量类型
,这里还赋值为null
。
3 . ?
表示这是一个可空的属性,也就是可以为null
的属性。
我们发现上面的代码没有getter
和setter
方法,其实Kotlin默认为我们生成了,只是不需要显式写出来而已。
同时还有几点需要注意
1 . Kotlin为var
变量默认生成getter
和setter
方法,功能与Java的getter
和setter
方法一致。
2 . Kotlin为val
变量默认生成getter
方法,由于val
只能赋值一次,自然就没有setter
方法啦。
Java和Kotlin的互操作
前面的内容我们说过Kotlin是一门专注于互操作性的语言,可以与Java无缝结合。那么我们如何在Java中使用Kotlin的类呢。
Kotlin代码
class People {
var name: String? = null
var age: String? = null
}
这是上面的代码块,下面我们先来看看在Kotlin中如何使用这个类。
fun main(args: Array<String>){
val people = People();
people.age = "12";
people.name = "bingjianit";
println(people.age + " " + people.name);
}
输出结果
12 bingjianit
你会发现与Java有以下几点不同
1 . 不需要new
一个对象
2 . 可以直接通过对象.属性
来取值或者赋值
下面看看上面的代码在Java中如何调用
public class Main {
public static void main(String[] args) {
People people = new People();
people.setName("bingjianit");
people.setAge("12");
System.out.println(people.getName() + " " + people.getAge());
}
}
你会发现虽然Kotlin代码中没有getter
和setter
方法,但是在Java代码中可以直接调用getter
和setter
代码。
注意: Kotlin默认我我们生成的getter和setter方法的规则与Java中自动生成getter和setter的规则相同,但是当一个变量以is开头时,它的getter方法就是变量本身,setter方法是去掉is加上set前缀
。
例子
Kotlin代码
class People {
var name: String? = null
var age: String? = null
var isRunnable: Boolean? = null
}
Java代码
// 去掉is加上set前缀
people.setRunnable(true);
//getter方法是变量本身,没有前缀
System.out.println(people.isRunnable());
反过来,Kotlin操作Java的类实体,也是一样的。
Java代码
public class Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Kotlin调用代码
fun main(args: Array<String>){
val animal = Animal()
animal.name = "兔子"
println(animal.name)
}
写在最后
这一部分我们简单了解了Kotlin面向对象的类和属性相关知识,这是我们写出结构清楚的代码的基础。