这种情况下,Kotlin该如何优雅的继承父类?


#1

比如我现在又两个类,以Java方式实现

 // 父类
public abstract class Chat {
  public String author;
  public String time;
}

// 子类
public class ChatChild extends Chat {
  public String voice;
}

以KT实现:

// 父类
abstract class Chat (val author:String ="",val time:String ="")

//子类
class ChatChild(val voice:String):Chat() {
}

可以发现,如果Kotlin子类要继承并且不传递参数的话,父类必须带上默认参数(感觉不太优雅),而Java不需要用。而我这里是使用Json解析,这样写默认参数完全是多余的。

不知道有没有什么优雅点的方式?


#2

据我所知,没有。。


#3

这种情况用java写比较优雅


#4

java的代码是好看了,但不安全。


#5

SAME! 这种设计感觉很蠢如果能直接override就好啦


#6

对,如果override,就相当于给父类的构造器对应的参数加个默认值就好了。


#7

打印了一个log,这个样子确认是可以的

abstract class Chat(val author: String = "", val time: String = "")

class ChildChat : Chat {
    var voice: String

    constructor(voice: String) {
        this.voice = voice
    }
}

#8

你给的java代码,转为kotlin应该是1


京ICP备16022265号-2 Kotlin China 2017 - 2018