今天來介紹Scala物件導向的概念
首先來介紹抽象類別(Abstract class)
Scala的抽象類別就跟Java類似,在class之前寫上關鍵字abstract
,以表示此類別只能擁有沒有實作(implementation)的抽象成員。
而Scala在抽象方法的部分跟Java不同,不用額外加上abstract
來宣告方法,只要那個方法沒有實作那它就是抽象方法。
abstract class Elements {
def contents: Array[String]
}
另外,不能實體化一個抽象類別
new Element
->error: class Element is abstract;
cannot be instantiated
那當我們要創建新的Element物件該怎麼做呢?
這時,我們就要創建一個子類別來extends
Element類別,並實作content這個抽象方法。extends
用法跟Java一樣
如下:
class ArrayElement(conts: Array[String]) extends Element {
def contents: Array[String] = conts
}
ArrayElementextends
Element這個抽象類別後,它讓ArrayElement可以繼承所有Element的非私有成員。
這兩個類別的關係是:ArrayElement
是Element
的子類別(subclass)Element
是ArrayElement
的父類別(superclass)
而這兩個類別都有一個共同點,就是它們都延伸(extends)自Scala.AnyRef,類似Java的Java.lang.Object。
來講一下繼承(inheritance)
繼承的意思就是讓父類別的成員也是子類別的成員。
而第2種情況我們稱子類別覆寫(override)了父類別。
如果說子類別的成員是concrete method而父類別的成員是abstract method,那我們說子類別的成員實作(implement)了父類別的抽象成員。
那今天先介紹到這邊 明天繼續