源代码:
/** * 特征类似于接口,可实现多重继承的功能 */ case class Point(var x:Double,var y:Double) extends Drawable{ def shift(deltaX:Double,deltaY:Double){x+=deltaX;y+=deltaY} } trait Drawable{ def draw(){println(this.toString)} } abstract class Shape(point: Point){ var x=point.x var y=point.y var r=4.0 def moveTo(point2: Point): Unit ={ x=point2.x y=point2.y } // 抽象方法没有方法体 def zoom(b:Double): Unit //圆形构造函数 def this(cpoint: Point, cr:Double){ this(cpoint: Point) this.r=cr } } class Circle(point: Point,R:Double) extends Shape(point: Point) with Drawable{ r=R //对图形放大 override def zoom(b:Double): Unit = { r = r * b } override def draw(): Unit ={ var toString="Circle center:("+point.x+","+point.y+")\t"+"R="+r println(toString) } } object MyDraw { def main(args: Array[String]) { val p=new Point(10,30) p.draw; /* val line1 = new Line(Point(0,0),Point(20,20)) line1.draw line1.moveTo(Point(5,5)) //移动到一个新的点 line1.draw line1.zoom(2) //放大两倍 line1.draw * */ val cir= new Circle(Point(10,10),5) cir.draw cir.moveTo(Point(30,20)) cir.draw cir.zoom(0.5) cir.draw } }View Code
涉及知识点: 1.Scala Trait(特征,实现多重继承)https://www.runoob.com/scala/scala-traits.html
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。
一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。
Trait(特征) 定义的方式与类类似,但它使用的关键字是 trait,如下所示:
trait Equal { def isEqual(x: Any): Boolean def isNotEqual(x: Any): Boolean = !isEqual(x) }
以上Trait(特征)由两个方法组成:isEqual 和 isNotEqual。isEqual 方法没有定义方法的实现,isNotEqual定义了方法的实现。
子类继承特征可以实现未被实现的方法。所以其实 Scala Trait(特征)更像 Java 的抽象类。
2.Scala 模式匹配https://www.runoob.com/scala/scala-pattern-matching.html
Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
以下是一个简单的整型值模式匹配实例:
object Test { def main(args: Array[String]) { println(matchTest(3)) } def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } }
match 对应 Java 里的 switch,但是写在选择器表达式之后。即: 选择器 match {备选项}。