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类,其x和y可以通过构造器提供。它有几个方法:
- 方法 1:计算自己在哪个象限。
whereAmI():String - 方法 2:计算和坐标原点的距离。
getDist():Double - 方法 3:计算与另一个点的距离。
fromPoint(other:Point):Double - 方法 4:重写
equals判断是否是同一个点(x和y都相等就是同一个点)。 - 方法 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)
}