Kotlin编写类与构造函数时报Expecting member declaration错误如何解决
问题原因
你代码触发编译错误的核心问题是子类重写父类属性时缺少val关键字声明:
Kotlin语法要求,重写父类的val/var属性时,必须显式携带val/var关键字标识这是类成员属性,你写的override color = "White"、override brand = "Toyota"两行漏了val,编译器无法识别这是成员声明,因此抛出Expecting member declaration错误。
修正方案
直接给两个重写的属性加上val关键字即可正常编译,修正后的完整代码如下:
open class Car( open val color:String?=null, open val brand:String?=null) { open fun speed(){ println("max speed is 220") } } class Toyota() : Car() { // 补全val关键字 override val color = "White" override val brand = "Toyota" override fun speed(){ println("max speed is 360") } } fun main() { val car = Toyota() car.speed() }
可选简化写法
也可以直接把重写的属性放到子类主构造函数中,省略类体内的重复声明,效果完全一致:
// 主构造函数内直接声明重写属性,代码更简洁 class Toyota(override val color: String = "White", override val brand: String = "Toyota") : Car()
内容的提问来源于stack exchange,提问作者Mahmoud Metawee
相关产品推荐
相关产品推荐

