1. 程式人生 > 其它 >Scala中抽象類&&單例物件&&伴生類

Scala中抽象類&&單例物件&&伴生類

抽象類(abstract)

抽象類可包含未實現的方法,即抽象方法
抽象類無法例項化
抽象類使用“abstract”關鍵字修飾(建議都寫上)

​ 子類重寫父類抽象方法時,“override”關鍵字可選
​ 子類重寫父類非抽象方法,“override”關鍵字必寫

父類
package test

// 定義一個抽象類,使用abstract修飾
abstract class Shape {
  def draw()

  def write() ={
    println("寫程式碼")
  }

}



子類
package test

// 重寫抽樣類的方法
class Circle extends
Shape { override def draw(): Unit = { println("畫一個○") } } object Test3{ def main(args: Array[String]): Unit = { val circle = new Circle circle.draw() circle.write() } }

在這裡插入圖片描述

單例物件(object)

單例物件
使用“object”關鍵字宣告,可包含變數、方法與程式碼定義
單例物件中的成員變數、成員方法通過單例物件名直接呼叫
單例物件第一次被訪問時初始化,並執行全部程式碼塊

單例物件不能new,且無構造引數
程式入口main()方法必須定義在單例物件中
單例物件與同名類定義在同一檔案中時形成繫結關係

package test

object Blah {
  println("initalizing")

  def sum(l:List[Int]) = l.sum


  def main(args: Array[String]): Unit = {
    // 單例物件可以通過單例物件名呼叫
    println(Blah.sum(List(1,2,3,4,5)))
  }

}

=>執行結果
initalizing     // 說明一開始呼叫的時候會執行單例物件中所有內容
15

伴生(Companion)

單例物件與同名類定義在同一檔案中時形成繫結關係

​ 同名類稱為單例物件的伴生類(class)
​ 單例物件稱為同名類伴生物件(object)

伴生類與伴生物件可相互訪問各自私有成員
伴生物件可為伴生類增加靜態成員

package test01

class Student(n:String,a:Int) {
  var name = n
  private var age = a
}


object Student{

  // 直接apply就出來   呼叫的apply方法
  // 這樣建立物件的時候就不用new了
  def apply(n: String, a: Int): Student = new Student(n, a)

  def main(args: Array[String]): Unit = {
    val stu1:Student = Student("zhangsan",12)   // 通過伴生物件的apply方法建立例項
    println(stu1.age)
    println(stu1.name)
  }
}


// 不用new的原因就是因為apply方法,比如這裡是Student.apply()方法
=>輸出結果 
12
zhangsan