Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多构造函数超类型的Kotlin继承_Kotlin - Fatal编程技术网

多构造函数超类型的Kotlin继承

多构造函数超类型的Kotlin继承,kotlin,Kotlin,我正在尝试继承JFrame类。它说“这个类型有一个构造函数,因此必须在这里初始化”,所以我不能写: class MainFrame : JFrame 但是: 因为我必须声明一个主构造函数,所以我不能这样做: constructor(title: String) : super(title) 我必须这样做: constructor(title: String) : this(title) 所以我必须这样声明主构造函数: class MainFrame(title: String) : JFr

我正在尝试继承JFrame类。它说“这个类型有一个构造函数,因此必须在这里初始化”,所以我不能写:

class MainFrame : JFrame
但是:

因为我必须声明一个主构造函数,所以我不能这样做:

constructor(title: String) : super(title)
我必须这样做:

constructor(title: String) : this(title)
所以我必须这样声明主构造函数:

class MainFrame(title: String) : JFrame(title)
问题是,这样每个二级构造函数都需要调用主构造函数,然后调用所选的超类型构造函数。如果我有多个超类型构造函数,我将被迫将进程委托给单个超类型构造函数,如果超类型类有多个用于多种目的的构造函数,这可能会很不方便

有什么方法可以使一个类具有多个调用不同超类型构造函数的构造函数

编辑:

我不能像这样删除超类型构造函数:

class MainFrame : JFrame
如果我这样做,则会出现以下错误: 此类型具有构造函数,因此必须在此处初始化

解决方案:

缺少构造函数,但它可以是辅助构造函数,因此错误:

此类型具有构造函数,因此必须在此处初始化


只能通过添加辅助构造函数来解决此问题。

在类定义中不必使用主构造函数。您可以简单地省略它,然后您的所有“次要”构造函数不必调用主构造函数,而是可以调用相关的超级构造函数

class MainFrame: JFrame {
    constructor() : super() {

    }

    constructor(title: String) : super(title) {

    }
}
然而,JFrame确实遵循Java中具有非官方主构造函数的模式,因此您可以将其作为主构造函数调用,并使用与之相同的默认值:

class MainFrame(title: String = "", gc: GraphicsConfiguration? = null): JFrame(title, gc) {

}

问题是,如果我删除主构造函数和超类型构造函数,我会得到这个错误:“这个类型有一个构造函数,因此必须在这里初始化”仔细检查您的语法是否与上面的语法不同。我上面提到的两个例子对我来说都很好。你是对的,一个构造函数缺失了,但它可以是一个二级构造函数。
class MainFrame(title: String = "", gc: GraphicsConfiguration? = null): JFrame(title, gc) {

}