Scala中抽象類&&單例物件&&伴生類
阿新 • • 發佈:2021-01-03
抽象類(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”關鍵字宣告,可包含變數、方法與程式碼定義
單例物件中的成員變數、成員方法通過單例物件名直接呼叫
單例物件第一次被訪問時初始化,並執行全部程式碼塊
程式入口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