1.extends关键字、重写字段和方法、超类的构造:

1.1 扩展类:  

扩展类使用extends,使用继承给出子类需要而超类没有的字段和方法,或者重写超类的方法。和java一样,可以将类声明为final,这样这个类将不能被继承。也可以将字段或者方法声明为final,这样,字段和方法不能被重写(override)。下面程序例子中,Employee类继承Person类。


1.2 重写方法、字段:

Scala中重写一个非抽象方法必须使用override修饰符。在scala中调用超类方法和java完全一样,使用super关键字。


1.3 使用超类构造器:

类有一个主构造器和任意数量的辅构造器,而每个辅构造器必须以对先前定义的辅构造器主构造器的调用开始。那么,子类的辅助构造器最终都会调用主构造器,只有主构造器可以调用超类的构造器

调用Employee的主构造方法

class Employee(name:String, age:Int, val salary:Double) extends Person(name,age)

这里有val修饰的salary字段代表是Employee的成员,在调用Employee的主构造器时,也调用了Person的主构造器。

Person类的主构造器Person(val name:String ,val age:Int),定义了name和age两个成员,同时还定义了一个成员school。

将类和主构造器交织在一起可以带来更精简的代码。类的参数就是主构造器的参数。

package com.vip.scala.packages

/**
 * 功能:继承相关操作的实现。
 * Date:2016-11-02 
 */

class Person(val name:String ,val age:Int) {
  println("You constructed the Person Class!!!")
  val school = "BJTU"
  override def toString() = {
    "This is the person.toString()!"
  }
}

class Employee(name:String, age:Int, val salary:Double) extends Person(name,age){
  println("You constructed the Employee Class!!!")
  override val school = "SJTU"
  override def toString() = {
    super.toString() + "This is the employee.toString()!"
  }
}

object OverwriteOperations {
  
  def main(args:Array[String]) = {
    val emp1 = new Employee("Tom",23,880238)
    val per1 = new Person("Jak",46)
    
    println("emp1's school: " + emp1.school)
    println("per1's school: " + per1.school)
    println(emp1.name)
  }
  
}