class Person5 {
val name : String = "Person5"
def getName = name
// def getName = "nihao"
def age : Int = 30
}
class Student5 extends Person5 {
override val name: String = "zhangsan"+ super.getName //执行后发现这里的super.getName ,并不是 person5,而是null,
//override def age: Int =12 + super.age
override val age :Int = 13
//var a = super.name //这里如果直接调用 父类的属性会报错 ,所以写了一个getName方法
var a = super.getName //这里也没有调用打印出person,而是打印出了 zhangsannull
var b = super.age
}
object TestStudent05 {
def main(args: Array[String]): Unit = {
val student05 = new Student5
println(student05.name)
println(student05.age)
println(student05.a)
println(student05.b)
}
}
输出结果
开始以为 name 是用 val 定义的常量,不可变的,所以才报错,
然后把val改成var 发现执行又报错。
后来发现是因为 super.getName 调用的时候还没被初始化
具体是怎么个调用顺序还不太理解,以后有时间在研究
参考文章
http://www.dataguru.cn/forum.php?mod=viewthread&tid=284847