假设我们具有以下主要和次要构造函数:
"configurations": {
"dev1": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/./environments/environment.ts",
"with": "src/./environments/environment.prodpro.ts"
}
]
},
为什么不能调用超类的内部构造函数?
open class Animal(val name:String){
internal constructor(message:InputStream): this(readName(message))
}
编辑
很明显,当将主构造函数转换为辅助构造函数或将其完全删除时,它将进行编译。
class Dog(name:String):Animal(name){
internal constructor(message:InputStream):super(message)
^^^^^
Primary constructor call expected
}
这是编译器错误吗?
答案 0 :(得分:4)
来自docs:
如果类具有主要构造函数,则每个次要构造函数都需要直接或间接通过另一个次要构造函数委派给主要构造函数。使用
可以委派给同一类的另一个构造函数this
关键字
和:
如果该类没有主构造函数,则每个辅助构造函数都必须使用
super
关键字来初始化基本类型,或者委托给另一种构造函数。
您的Dog
类具有一个主要的构造函数,因此您必须使用this
来委托给它。
如果删除主要构造函数,则可以引用super
构造函数:
class Dog : Animal {
constructor(message: InputStream) : super(message)
}
(上面没有出现错误)