一、类
1、声明类
Java声明构造类Person:
//java
public class Person{
private final String name;
public Person(String name){
this.name = name;
}
public String getName(){
return name;
}
}
与Java不同,Kotlin声明构造类Person:
//kotlin
class Person(val name: String)
类似于上述Kotlin代码中这种只有数据(如 name)没有其他代码的类,通常被叫做值对象。在 Kotlin 中 public 是默认的可见性,所以可以省略它。
Kotlin 声明无结构体的类
//Kotlin
class Test //当类没有结构体时,花括号可省略
2、类的实例化
Kotlin没有使用new关键字,而是直接调用类的构造函数:
val person = Person("zhangsan")
二、抽象类
在Java中抽象类和抽象方法必须要有 “abstract” 关键字修饰,且抽象类中不一定只有抽象方法,抽象方法的目的是为了限定子类必须完成父类的某些动作。抽象类不能被实例化。
//java
public abstract class Test{}
在Kotlin中,关于抽象类同Java一样,使用 abstract 来修饰。抽象成员始终是open的,不需要显式地使用 open 修饰符。抽象类中的非抽象成员不是默认open,需要标注为open才可被重写。
//kotlin
abstract class Test{ //抽象类
abstract fun fun22() //抽象方法,必须被子类重写
open fun fun33(){} //可被子类重写
fun fun44(){} //不可被子类重写 final类型
}
class Test2: Test() {
override fun fun22() {
println("Test2::fun22")
}
override fun fun33() {
super.fun33()
println("Test2::fun33")
}
}
三、接口
Kotlin与Java一样,定义接口使用的关键字是 interface,定义方式与类基本相同
//Java
[public] interface interface_name [extends interface1_name[, interface2_name,…]] {
// 接口体,其中可以包含定义常量和声明方法
[public] [static] [final] type constant_name = value; // 定义常量
[public] [abstract] returnType method_name(parameter_list); // 声明方法
}
Java8中,接口中可包含默认方法,接口的实现类可重写也可不重写接口中的默认方法:
default void methodDefault() {
System.out.println("这是接口中定义的默认方法...");
}
Kotlin的接口中的方法也可以有一个默认实现,与Java8不同的是,Java8中需要你在这样的实现上标注 default关键字,但是 Kotlin 没有特殊的注解,只需要提供一个方法体:
interface clickable{
fun click()
fun showOff() = println("I am clickable") //接口中的默认方法,接口的实现类可重写,也可不重写接口中的默认方法
}
注意,如果一个类实现的两个接口中都包含了带默认实现的方法,那么该类关于该方法的一个实现都不会使用,而强制要求你自己在类中提供自己的实现,Java 和 Kotlin 都是这样。
参考: