构造器 2025-11-12

7 阅读1分钟
object da {
  class Boss {
    def power(): Unit = {
      println("Boss 有权力")
    }

    var car = "豪车"
  }

  class NoBody extends Boss {
    
    def run():Unit{}

  }
override  def power():Unit={
  println("老莫,我想吃鱼了")
}
  def main(args: Array[String]): Unit = {
    val b = new NoBody
    println(b.car)
    b.power()
    b.run()
  }
}
class Father() {
  println("Father 构造器被调用")
}


class Son extends  Father(){
  println("Son 构造器被调用")
}

  def main(args: Array[String]): Unit = {
    new  Son
  }
}
object da2 {
class Dog(var name:String,var age:Int){
  println(s"Dog${name},${age} 构造器被调用")
  }

  class  RuralDog(name:String,age:Int,var color:String) extends Dog (name,age){
    println(s"构造器被调用${color}")
  }

  def main(args: Array[String]): Unit = {
    new RuralDog("mm",3,"黄色")
  }
}

你正在设计一个二维游戏的界面,需要用很多的点来表示游戏中的角色。设计一个Point类,其xy可以通过构造器提供。它有几个方法:

  1. 方法 1:计算自己在哪个象限。whereAmI():String
  2. 方法 2:计算和坐标原点的距离。getDist():Double
  3. 方法 3:计算与另一个点的距离。fromPoint(other:Point):Double
  4. 方法 4:重写equals判断是否是同一个点(xy都相等就是同一个点)。
  5. 方法 5:重写toString,更友好的输出点的信息。
class Point(var x: Double, var y: Double) {
  // 方法1:判断当前点所在象限
  def whereAmI(): String = {
    if (x > 0 && y > 0) "第一象限"
    else if (x < 0 && y > 0) "第二象限"
    else if (x < 0 && y < 0) "第三象限"
    else if (x > 0 && y < 0) "第四象限"
    else if (x == 0 && y == 0) "原点"
    else if (x == 0) "在y轴上"
    else "在x轴上"
  }

  // 方法2:计算与坐标原点的距离
  def getDist(): Double = {
    Math.sqrt(x * x + y * y)
  }

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

  // 方法4:重写equals判断是否为同一点
  override def equals(obj: Any): Boolean = obj match {
    case other: Point => this.x == other.x && this.y == other.y
    case _ => false
  }

  // 方法5:重写toString方法
  override def toString: String = s"Point($x, $y)"
}

def main(args: Array[String]): Unit = {
  val p1 = new Point(3, 4)
  println(p1.whereAmI())      // 第一象限
  println(p1.getDist())       // 5.0

  val p2 = new Point(0, 0)
  println(p1.fromPoint(p2))   // 5.0
  println(p1 == p2)           // false
  println(p1.toString)        // Point(3.0, 4.0)
}