Scala 程式設計基礎 類以及類的繼承

2021-09-11 04:18:53 字數 1783 閱讀 3543

scala 類的繼承特點:

1.   scala 是單繼承

2.  scala 子類重寫父類的非抽象方法,屬性必須使用override 關鍵字

3.  scala 繼承關鍵字extends

看乙個例子:

class point(val xc: int, val yc: int) 

}class location(override val xc: int, override val yc: int,

val zc :int) extends point(xc, yc)

}object test

}

說明:

1.  locatoin 繼續 point  是單繼承

2. 在 new location(10, 20, 15)時,

2.1  10,與20率先傳遞給point(10,  20)

2.2  location 中的 需要使用override 關鍵字,且必須是val

3.  location 中的move 與 point中的move不是同一函式,所以location中的move並不是重寫父類point中的move,其實是過載所以不用加 override關鍵字

override 的理解: 即使是下面的情況也必須用override,因為location傳入的是point的兩個引數,必須用override關鍵字

class point(val xc: int, val yc: int) 

class location(override val xc: int, override val yc: int) extends point(xc, yc)

在看乙個override 的例子,子類重寫父類的屬性:

class day(val month: int, val year: int) 

class date(override val month: int, override val year: int) extends day(month, year)

object test

}output:

data***

說明:  date子類,使用關鍵字override重寫了父類的name 屬性,呼叫 tostring時name值已經被改寫了.

1. 如果父類day中,  name是這樣定義的  var name = "test",那麼子類中就不必使用override關鍵字

可以直接 name = "data"

2. 構造器day,date 必須使用val,否則會報: cannot override a mutable variable class 具體原因我後面在看看。

子類呼叫父類方法:

lass day(val month: int, val year: int) 

override def tostring: string = name + "***"

}class date(override val month: int, override val year: int) extends day(month, year)

}object test

}

說明: 子類呼叫父類方法:  super.get(4) 

一點要強調:子類重寫了父類的屬性name後,子類中不能使用super.name呼叫父類的name

scala程式設計 樣例類

樣例類在scala中是第一種特殊的類,可用於模式匹配 但在基於版本2.11.8測試中普通的類也能進行模式匹配 case class是多例的,後面需要加引數 無參也要加上括號 case object 是單例的。import scala.util.random abstract class animal...

scala基礎語法 類定義

package org.xj.scala.spark 宣告類 乙個原始檔中可以包含很多類,並且scala都是public級別的 class basic2 定義乙個類 scala中的var val def val和def都會被編譯為乙個方法,區別是 val會被編譯器保證執行時其值不能改變,但def不同...

python怎麼繼承類 python類的繼承

一 概述 二 類的繼承 2.1 繼承的定義 2.2 建構函式的繼承 2.3 子類對父類方法的重寫 三 類繼承的事例 一 概述 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。通過繼承建立...