iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

今天來介紹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物件該怎麼做呢?
這時,我們就要創建一個子類別來extendsElement類別,並實作content這個抽象方法。
extends用法跟Java一樣
如下:

class ArrayElement(conts: Array[String]) extends Element {
    def contents: Array[String] = conts
}

ArrayElementextendsElement這個抽象類別後,它讓ArrayElement可以繼承所有Element的非私有成員。
這兩個類別的關係是:
ArrayElementElement的子類別(subclass)
ElementArrayElement的父類別(superclass)
而這兩個類別都有一個共同點,就是它們都延伸(extends)自Scala.AnyRef,類似Java的Java.lang.Object。

來講一下繼承(inheritance)
繼承的意思就是讓父類別的成員也是子類別的成員。

  1. 除了父類別的私有成員不會被繼承
  2. 子類別已經實作的同名稱同參數成員也不會被繼承

而第2種情況我們稱子類別覆寫(override)了父類別。
如果說子類別的成員是concrete method而父類別的成員是abstract method,那我們說子類別的成員實作(implement)了父類別的抽象成員。

那今天先介紹到這邊 明天繼續
/images/emoticon/emoticon48.gif


上一篇
[Day 14]Scala Currying
下一篇
[Day 16]Scala繼承與組合 Part2
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言