由于在类中基本构造函数的参数定义前加上val或var后,对应的实例属性就会被定义,所以原来的属性定义就不需要了。而且,编译器会自动追加用于存取这些属性的方法。Scala中基本上可以去除语句尾部的“;”符号,这里也都去除了。
scala> val p1 = new Person("Yu", "Guan", new Person("ZheTian", "Wu"))
p1: Person = Person@904f75
scala> p1.lastName
res7: String = Guan
scala> p1.spouse
res8: Person = Person@2e879 |
上述程序中描述对象的字符串比较难解,下面就扩展一下类使他显示姓和名吧。任何对象的文字描述是由对象的最根类Any的toString:String方法来实现的。在各个类中使用自己的实现来覆盖这个方法就可以了,这里的显示格式为[姓:firstName 名:lastName 配偶:没有或(姓:firstName 名:lastName)]。另外,Scala中覆盖父类的方法一定要加上override修饰符。
class Person ... { ...
override def toString : String = super.toString + " [姓: " + lastName + " 名: " + firstName + " 配偶: " + (if (spouse != null) " ("+ spouse.lastName + "," + spouse.firstName + ")" else "没有") + "]"
...} |
下面是修改后的效果
scala> val p1 = new Person("Yu", "Guan", new Person("ZheTian", "Wu"))
p1: Person = Person@4a0ac5 [姓: Guan 名: Yu 配偶: (Wu, ZheTian)]
scala> p1
res0: Person = Person@4a0ac5 [姓: Guan 名: Yu 配偶: (Wu, ZheTian)] |
Scala讲座中类定义和构造函数的内容就到这里。