一.类
java中声明类:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
kotlin中声明类
class Person(var name:String)
fun main() {
val person = Person("")
person.name = "storm"
}
可以看到kotlin中对类的声明简洁,默认实现了属性的set/get方法。
kotlin中的继承
/*kotlin中的类,默认是final类型的,表示类不可以被继承
子类若要继承该类必须在父类上加open关键字修饰
*/
open class MediaPlayer(var path:String) {
// 类中的方法默认是public final类型的,子类若需要重写,方法上需要加上open关键字
public open fun play(path:String):Unit{
}
}
二.抽象类
java中声明抽象类
public abstract class Play {
//抽象方法,需子类实现重写
abstract void doWork();
//默认方法,子类重写与否都可
void doSomeThing(){
}
}
kotlin中声明抽象类
abstract class Play {
//kotlin中抽象方法需子类重写
abstract fun doWork();
//默认是final类型的,如果需要子类重写需要加open关键字
open fun doSomeThing(){
}
}
class childPlay: Play() {
override fun doWork() {
TODO("Not yet implemented")
}
override fun doSomeThing() {
super.doSomeThing()
}
}
kotlin中的抽象类也需要使用abstract关键字来修饰,抽象方法也需要使用abstract关键字修饰,kotlin中的普通方法如果需要子类重写,需要使用open关键字修饰,因为kotlin中的普通方法默认是final类型的,表示方法不可以被子类重写。
三.接口
java中的接口
public interface MediaPlayer {
// java中接口变量默认是public static final类型的
String path = "sdcard/a.mp3";
//抽象方法,子类需要实现
void play(String path);
}
kotlin中的接口
interface MediaPlayer {
// 变量字段需要实现get/set方法
var path: String
get() = "sdcard/a.mp3"
set(value) = TODO()
//默认是抽象方法,子类需要实现
fun play(path:String)
//kotlin中接口也可以包括具体的实现方法,这点与java不同
fun test(){
}
}
对比发现kotlin中的接口里面可以有普通方法的实现,这点与java不同,jdk8中可以使用default关键字修饰方法,达到相同的效果。
网友评论