Scala继承

Scala继承

Scala 继承一个基类跟 Java 很相似, 但我们需要注意以下几点:

  1. 重写一个非抽象方法必须使用 override 修饰符。
  2. 只有主构造函数才可以往基类的构造函数里写参数。
  3. 在子类中重写超类的抽象方法时,你不需要使用 override 关键字。

案例

Scala继承

class Point(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x = x + dx y = y + dy println ("x 的坐标点: " + x); println ("y 的坐标点: " + y); } } class Location(override val xc: Int, override val yc: Int, val zc :Int) extends Point(xc, yc){ var z: Int = zc def move(dx: Int, dy: Int, dz: Int) { x = x + dx y = y + dy z = z + dz println ("x 的坐标点 : " + x); println ("y 的坐标点 : " + y); println ("z 的坐标点 : " + z); } }

Scala 使用 extends 关键字来继承一个类。实例中 Location 类继承了 Point 类。Point 称为父类(基类),Location 称为子类。

override val xc 为重写了父类的字段。继承会继承父类的所有属性和方法,Scala 只允许继承一个父类。案例如下:

import java.io._ class Point(val xc: Int, val yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x = x + dx y = y + dy println ("x 的坐标点 : " + x); println ("y 的坐标点 : " + y); } } class Location(override val xc: Int, override val yc: Int, val zc :Int) extends Point(xc, yc){ var z: Int = zc def move(dx: Int, dy: Int, dz: Int) { x = x + dx y = y + dy z = z + dz println ("x 的坐标点 : " + x); println ("y 的坐标点 : " + y); println ("z 的坐标点 : " + z); } } object Test { def main(args: Array[String]) { println("嗨客网(www.haicoder.net)!\n") val loc = new Location(10, 20, 15); // 移到一个新的位置 loc.move(10, 10, 5); } }

执行以上代码,输出结果为:

02_Scala继承.png

以上代码的 Location 类继承了 Point 类。

Scala重写方法

Scala 重写一个非抽象方法,必须用 override 修饰符

class Person { var name = "" override def toString = getClass.getName + "[name=" + name + "]" } class Employee extends Person { var salary = 0.0 override def toString = super.toString + "[salary=" + salary + "]" } object Test extends App { println("嗨客网(www.haicoder.net)!\n") val fred = new Employee fred.name = "Fred" fred.salary = 50000 println(fred) }

执行以上代码,输出结果为:

03_Scala继承.png

使用了 override 重写了非抽象方法。