鍍金池/ 教程/ Scala/ 組合和繼承–抽象類
包對(duì)象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達(dá)式
類和對(duì)象 (三)
操作基本數(shù)據(jù)類型
for 表達(dá)式
組合和繼承–重載成員函數(shù)和方法
類和對(duì)象 (二)
組合和繼承–定義 factory 對(duì)象
組合和繼承–多態(tài)和動(dòng)態(tài)綁定
Trait 的基本概念
if 表達(dá)式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡(jiǎn)化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問控制修飾符
Trait 示例–Rectangular 對(duì)象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無參數(shù)方法
類和對(duì)象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
try 表達(dá)式處理異常
選擇瘦接口還是胖接口設(shè)計(jì)?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問控制修飾符添加作用域
Scala 的類層次關(guān)系
類和對(duì)象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進(jìn)一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實(shí)現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對(duì)象 (四)
函數(shù)–尾遞歸
沒有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復(fù)
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴(kuò)展類
函數(shù)–部分應(yīng)用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來實(shí)現(xiàn)可疊加的修改操作

組合和繼承–抽象類

上一篇我們定義了我們需要解決的問題,我們首要的任務(wù)是定義 Element 類型,這個(gè)類型用來表示一個(gè)布局元素。由于每個(gè)元素為一個(gè)具有二維矩形形狀的字符串,因此我們理所當(dāng)然的可以定義個(gè)成員變量 contents,用來表示這個(gè)二維布局元素的內(nèi)容。這個(gè)元素我們使用一個(gè)字符串的數(shù)組來表示,這個(gè)數(shù)組的每個(gè)字符串元素代表布局的一行。也就是 contents 的類型為 Array[String]。

abstract class Element {
  def contents: Array[String]
}

在這個(gè)類中,成員 contents 使用了沒有定義具體實(shí)現(xiàn)的方法來定義,這個(gè)方法稱為一“抽象方法”,一個(gè)含有抽象方法的類必須定義成抽象類,也就是使用abstract關(guān)鍵字來定義類。

abstract 修飾符表示所定義的類可能含有一些沒有定義具體實(shí)現(xiàn)的抽象成員,因此你不能構(gòu)建抽象類的實(shí)例,如果你試圖這么做,編譯器將報(bào)錯(cuò):

scala> new Element
<console>:9: error: class Element is abstract; cannot be instantiated
              new Element
              ^

后面的文章將繼續(xù)介紹如何創(chuàng)建這個(gè)抽象類的子類,你可以構(gòu)造這些子類的具體實(shí)例,這是因?yàn)檫@些子類實(shí)現(xiàn)了抽象成員。

要注意的是 contents 方法本身沒有使用 abstract 修飾符,一個(gè)沒有定義實(shí)現(xiàn)的方法就是抽象方法,和 Java 不同的是,抽象方法不需要使用 abstract 修飾符來表示,只要這個(gè)方法沒有具體實(shí)現(xiàn),就是抽象方法,相反,如果該方法有具體實(shí)現(xiàn),稱為“具體(concrete)”方法。

另一個(gè)術(shù)語用法需要分辨聲明:declaration 和定義:definition。類 Element 聲明了抽象方法 contents,但當(dāng)前沒有定義具體方法。然而下一節(jié),我們要定義一些具體方法來加強(qiáng) Element。