本篇文章主要講解下 Scala 中類 的繼承,與方法/參數 重載等問題。
結合上面内容劃分如下
1.Scala 類的繼承
2.類的繼承權限變更
3.類繼承的注意事項
4.重寫變量
5.重寫方法/final
1.Scala 類的繼承
scala 類的繼承 與 Java 的繼承并沒有多大的差別
都是使用 extend 關鍵字
下面給出一個基本的繼承例子 :
package classDefined
import javax.print.attribute.standard.JobOriginatingUserName
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None) {
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5 {
override def toString: String = {
this.userName.getOrElse(" ")
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
2.類的繼承權限變更
scala 權限基本沒有發生變化。
聲明為 繼承類
1.var 能通路,仍為 var
2.val 能通路,仍為val
3.private val / var 不能通路
4.未使用限定符,實際為 private val / var 不能通路
下面給出一個示例:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None, var tmpName: String, var password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5(userName: Option[String]) {
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
3.類繼承的注意事項
類的繼承,有一些注意事項,尤其是在 屬性重載這塊。下面列舉下需要注意的地方。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9UleNRTTE10dBRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwkTN1ITNwYTM2AjMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
4.重寫方法 / 重寫變量
重寫方法,重寫變量的示例:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin5(val userName: Option[String] = None, var tmpName: String, val password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
}
class ClassExtend5(userName: Option[String]) extends ClassOrigin5(userName: Option[String]) {
override val password:String = "NoEmpty"
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
object ClassDefined14 extends App {
val d = new ClassExtend5(Option("zz"))
println(d.toString)
}
5.重寫方法 / final
普通的方法重載沒有過的多需要注意的地方,在這裡就不做介紹了
這裡我們主要注意的是 final 的修飾符,增加final 修飾符的話,在子類中不能重載,案例如下:
package classDefined
/**
* Created by szh on 2018/12/6.
*/
class ClassOrigin6(val userName: Option[String] = None, var tmpName: String, val password: String, private val own: String, kk: String) {
def this(userName: Option[String]) {
this(userName, "Empty", "Empty", "---", "---")
}
def speakEnglish(): Unit = {
println(s"hello ")
}
}
class ClassExtend6(userName: Option[String]) extends ClassOrigin6(userName: Option[String]) {
override val password: String = "NoEmpty"
override final def speakEnglish(): Unit = super.speakEnglish()
override def toString: String = {
var stringBuffer = new StringBuffer()
stringBuffer.append(this.userName.getOrElse(" ")).append(" ")
stringBuffer.append(this.tmpName).append(" ")
stringBuffer.append(this.password).append(" ")
//stringBuffer.append(this.own).append(" ")
//stringBuffer.append(this.kk).append(" ")
stringBuffer.toString
}
}
class ClassExtendExtend6(userName: Option[String]) extends ClassExtend6(userName: Option[String]) {
// override def speakEnglish(): Unit = {
// println("cc")
// }
}
object ClassDefined15 extends App {
val d = new ClassExtendExtend6(Option("pppp"))
println(d.toString)
}