kotlin - 多构造函数超类型的 Kotlin 继承
问题描述
我正在尝试继承 JFrame 类。它说“这种类型有一个构造函数,因此必须在这里初始化”所以我不能写:
class MainFrame : 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) {
}
推荐阅读
- php - Docker MySQL 问题 SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed
- c - 在 c 中将 OMP 转换为 Pthreads
- c# - 该文件无法访问,因为它正在被另一个进程使用 c#
- solace - Solace VPN Bridge 能否用于从一对多发布/订阅转换为 DTO 发布/订阅?
- javascript - 未应用添加到 ClassList 的类
- c# - C#数据表划分
- node.js - While sending mail by Nodemailer I am getting error of Invalid login
- tensorflow - 如果softmax不包含在训练中,那么在TensorFlow中如何获得softmax的参数?
- python - 如何解析plist?
- html - css 中的大纲在 IE 中不起作用(最新版本)