更新時(shí)間:2020-12-30 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
Scala和Java類似,只允許繼承一個(gè)父類。不同的是,Java只能繼承父類中非私有的屬性和方法。而Scala可以繼承父類中的所有屬性和方法,子類擁有父類的所有特征。
但是Scala在子類繼承父類的時(shí)候,有以下幾點(diǎn)需要注意:
如果子類要重寫一個(gè)父類中的非抽象方法,則必須使用override關(guān)鍵字,否則會(huì)出現(xiàn)語法錯(cuò)誤。
如果子類要重寫父類中的抽象方法時(shí),則不需要使用override關(guān)鍵字。
下面,創(chuàng)建一個(gè)Point類和一個(gè)Location類,并且Location類繼承Point類,演示子類Location重寫父類Point中的字段,具體代碼如文件1所示。
文件1 ExtendsTest.scala
class Point(val xc: Int, val yc: Int) {
var x: Int = xc
var y: Int = yc
def move(dx: Int, dy: Int) {
x = x + dx
y = y + dy
println ("x 的坐標(biāo)點(diǎn) : " + x);
println ("y 的坐標(biāo)點(diǎn) : " + y);
}
}
class Location(override val xc: Int, override val yc: Int,
val zc :Int) extends Point(xc, yc){
var z: Int = zc
def move(dx: Int, dy: Int, dz: Int) {
x = x + dx
y = y + dy
z = z + dz
println ("x 的坐標(biāo)點(diǎn) : " + x);
println ("y 的坐標(biāo)點(diǎn) : " + y);
println ("z 的坐標(biāo)點(diǎn) : " + z);
}
}
object ExtendsTest {
def main(args: Array[String]) {
val loc = new Location(10, 20, 15);
// 移到一個(gè)新的位置
loc.move(10, 10, 5);
}
}上述代碼中,第1-10行代碼是創(chuàng)建了一個(gè)Point類,并在類中定義了兩個(gè)字段x,y以及一個(gè)方法move();第11-22行代碼是創(chuàng)建了一個(gè)Location類,并繼承Point類重寫Point類的字段,并在Location類中定義了三個(gè)字段x、y、z以及一個(gè)方法move();第24-27行代碼是主方法main(),并在主方法中創(chuàng)建Location的實(shí)例對象loc,使用該對象訪問子類中move()方法。
運(yùn)行上述文件1中的代碼,效果如圖1所示。

圖1 子類重寫父類字段的運(yùn)行結(jié)果
猜你喜歡:
Scala的控制結(jié)構(gòu)語句有哪幾種?各語法格式介紹
Windows系統(tǒng)中如何下載安裝Scala插件?
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19