动态绑定
Scala 中属性和方法都是动态绑定,而 Java 中只有方法为动态绑定。
// 定义一个父类class Person7() {var name: String = _var age: Int = _println("1. 父类的主构造器调用")def this(name: String, age: Int){this()println("2. 父类的辅助构造器调用")this.name = namethis.age = age}def printInfo(): Unit = {println(s"Person: $name $age")}//可以多态def printInfo(person7: Person7): Unit = {println("Person: " + person7.printInfo())}}// 定义子类class Student7(name: String, age: Int) extends Person7(name, age) {var stdNo: String = _println("3. 子类的主构造器调用")def this(name: String, age: Int, stdNo: String){this(name, age)println("4. 子类的辅助构造器调用")this.stdNo = stdNo}override def printInfo(): Unit = {println(s"Student: $name $age $stdNo")}}class Teacher extends Person7 {override def printInfo(): Unit = {println(s"Teacher")}}
调用
val person = new Person7()val student = new Student7("abc", 11)val teacher = new Teacher()println("=======================")person.printInfo(student)/**输出1. 父类的主构造器调用2. 父类的辅助构造器调用3. 子类的主构造器调用1. 父类的主构造器调用=======================Student: abc 11 nullPerson: ()*/
动态绑定
val person = new Student7("abc", 11)println("=======================")person.printInfo()println(person.name)/**1. 父类的主构造器调用2. 父类的辅助构造器调用3. 子类的主构造器调用=======================Student: abc 11 null*/
