//new一个子类的过程:子类构造函数调用父类构造函数,父类field初始化后,再初始化子类的
object Score extends App {
class Student {
val classNumber : Int = 10
//classScores的初始化依赖于classNumber
val classScores: Array[Int] = new Array[Int](classNumber)
println("fu "+ classScores.length)
}
/* class PEStudent extends Student{
override val classNumber: Int =3
}
val s = new Student
s.classNumber //10
println(s.classScores.length) //10
//new PE先执行父类构造器(null构造器),再执行PE构造器(null),再执行函数体部分(field、函数初始化等)
val p = new PEStudent //p.classNumber值为3 ,
println(p.classScores.length) // 子类的classScore没有重写,值为0
*/
//提前将classNumber指定为3
class PEStudent extends {
override val classNumber: Int = 3
} with Student
val s = new Student
s.classNumber //10
println(s.classScores.length) //10
val p = new PEStudent //p.classNumber值为3 ,
println(p.classScores.length) // 3
}