这是Kotlin中继承的示例。
open class Person() {
var _name : String = ""
var _age : Int = 0
constructor(name: String, age : Int) : this(){
_name = name
_age = age
}
}
class Student() : Person() {
var _university : String = ""
constructor (name : String, age: Int, university: String) : super(name, age){
_university = university
}
}
fun main() {
var person = Person("a", 10)
var student = Student("b", 18, "MIT")
println("${person._name} : ${person._age}")
println("${student._university}")
}
在这种情况下,如何解决错误“期望进行主要构造函数调用”?
答案 0 :(得分:3)
如果类具有主构造函数,则必须将辅助构造函数委派给主构造函数。 Person
类的情况就是这样,而事实并非如此。
首先,您应该按照Kotlin的习惯用法(使用可选参数而不是构造函数重载)删除// This one's completely optional to do, skip if you don't want to follow idioms
open class Person(
var name : String = ""
var age : Int = 0
)
类的样板。
class Student: Person {
var university: String = ""
constructor() : super()
constructor (name: String, age: Int, university: String) : super(name, age) {
this.university = university
}
}
然后,Student类应具有两个单独的构造函数,因为如果您使用主构造函数,则其他构造函数必须委托给它:
#[macro_export]
macro_rules! btreemap {
() => {{
::std::collections::BTreeMap::new()
}};
($( $key: expr => $val: expr ),*) => {{
let mut map = ::std::collections::BTreeMap::new();
$( map.insert($key, $val); )*
map
}};
}