天天看點

Scala_類-》類的繼承

本篇文章主要講解下 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.類繼承的注意事項

類的繼承,有一些注意事項,尤其是在 屬性重載這塊。下面列舉下需要注意的地方。

Scala_類-》類的繼承

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)
}
           
Scala_類-》類的繼承