第八天:模拟图形绘制实验
学习任务
学习如何定义抽象类和抽象方法。
实现 Shape 抽象类,包含 moveTo 和 zoom 方法。
实现 Line 类和 Circle 类,继承 Shape 并混入 Drawable 特质。
重载 draw 方法,实现图形的绘制。
学习内容
抽象类和抽象方法:
定义抽象类和抽象方法。
继承和方法重载:
类的继承和方法重载。
图形绘制:
实现 Line 和 Circle 类的绘制方法。
代码示例
学习任务
学习如何定义抽象类和抽象方法。
实现 Shape 抽象类,包含 moveTo 和 zoom 方法。
实现 Line 类和 Circle 类,继承 Shape 并混入 Drawable 特质。
重载 draw 方法,实现图形的绘制。
学习内容
抽象类和抽象方法:
定义抽象类和抽象方法。
继承和方法重载:
类的继承和方法重载。
图形绘制:
实现 Line 和 Circle 类的绘制方法。
代码示例
abstract class Shape(val position: Point) { def moveTo(newPosition: Point): Unit def zoom(scale: Double): Unit } class Line(start: Point, end: Point) extends Shape(start) { def draw(): Unit = println(s"Line: (${start.x},${start.y})--(${end.x},${end.y})") def moveTo(newPosition: Point): Unit = { val deltaX = newPosition.x - position.x val deltaY = newPosition.y - position.y start.shift(deltaX, deltaY) end.shift(deltaX, deltaY) } def zoom(scale: Double): Unit = { val midX = (start.x + end.x) / 2 val midY = (start.y + end.y) / 2 start.x = midX + (start.x - midX) * scale start.y = midY + (start.y - midY) * scale end.x = midX + (end.x - midX) * scale end.y = midY + (end.y - midY) * scale } } class Circle(center: Point, var radius: Double) extends Shape(center) { def draw(): Unit = println(s"Circle center: (${center.x},${center.y}), R=$radius") def moveTo(newPosition: Point): Unit = center.shift(newPosition.x - center.x, newPosition.y - center.y) def zoom(scale: Double): Unit = radius *= scale } object MyDraw { def main(args: Array[String]): Unit = { val p = new Point(10, 30) p.draw() val line1 = new Line(new Point(0, 0), new Point(20, 20)) line1.draw() line1.moveTo(new Point(5, 5)) line1.draw() line1.zoom(2) line1.draw() val cir = new Circle(new Point(10, 10), 5) cir.draw() cir.moveTo(new Point(30, 20)) cir.draw() cir.zoom(0.5) cir.draw() } }
学习总结
掌握了抽象类和抽象方法的定义。
学会了如何实现继承和方法重载,理解了图形对象的移动和缩放逻辑。