类的继承——练习

34 阅读1分钟

设计一个Point类,其x和y可以通过构造器提供。

它有几个方法:

1. 方法1: 计算自己在哪个象限。 whereAmI():String

2. 方法2: 计算和坐标原点的距离。getDist():Double

3. 方法3: 计算与另一个点的距离。fromPoint(other:Point):Double

4. 方法4: 重写equals 判断是否是同一个点(x和y都相等就是同一个点)。

5. 方法5: 重写toString,更友好的输出点的信息。

再设计一个子类LabelPoint它来继承Point类,其构造器接收一个标签值和x,y坐标。

例如: New LabelPoint("black",1,2)

import scala.math.sqrt

object basic14 {

   class Point(val x: Double, val y: Double) {

     // 方法1: 计算自己在哪个象限。 whereAmI():String
     def whereAmI(): String = {
       if (x == 0 && y == 0) {
         "原点"
       } else if (x == 0) {
         "在y轴上"
       } else if (y == 0) {
         "在x轴上"
       } else if (x > 0 && y > 0) {
         "第一象限"
       } else if (x < 0 && y > 0) {
         "第二象限"
       } else if (x < 0 && y < 0) {
         "第三象限"
       } else { // x > 0 && y < 0
         "第四象限"
       }
     }

    // 方法2: 计算该点到坐标原点 (0, 0) 的距离。getDist():Double
      def getDist(): Double = {
        sqrt(x * x + y * y)
      }

     // 方法3: 计算与另一个点的距离。fromPoint(other:Point):Double
     def fromPoint(other: Point): Double = {
       val dx = this.x - other.x
       val dy = this.y - other.y
       sqrt(dx * dx + dy * dy)
     }


     // 方法4: 重写equals 判断是否是同一个点(x和y都相等就是同一个点)。
     override def equals(obj: Any): Boolean = {
       val other = obj.asInstanceOf[Point]
       this.x == other.x && this.y == other.y
     }

     // 方法5: 重写toString,更友好的输出点的信息。
     override def toString: String = {
       s"Point(${x},${y})"
     }

   }


     def main(args: Array[String]): Unit = {
       val p1 = new Point(1,1)
       println(p1)

  }

}