预期主构造函数调用

qua*_*ien 2 kotlin

这是 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}")
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何解决错误“预期主构造函数调用”?

Ani*_*ahu 6

如果类具有主构造函数,则必须将辅助构造函数委托给主构造函数。Student没有这样做的班级就是这种情况。

首先,您应该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
)
Run Code Online (Sandbox Code Playgroud)

然后 Student 类应该有两个单独的构造函数,因为如果您采用主构造函数,则其他构造函数必须委托给它:

class Student: Person {
    var university: String = ""
    
    constructor() : super()

    constructor (name: String, age: Int, university: String) : super(name, age) {
        this.university = university
    }
}
Run Code Online (Sandbox Code Playgroud)