大數據教程Scala系列之繼承

1. 擴展類

在Scala中擴展類的方式和Java一樣都是使用extends關鍵字

可以把類聲明爲final,使之不能擴張

也可以把單個方法或者字段聲明爲final,以確保它不能被重寫,注意和Java的不同,Java中final修飾的字段意味着不可變。

5.3.2. 重寫方法

在Scala中重寫一個非抽象的方法必須使用override修飾符

在子類中調用超類的方法,使用super,和Java一致。

5.3.3.protected修飾的字段和方法

被protected修飾的字段或者方法,可以被其子類訪問;

與Java不同的是,protected修飾的成員對於類所屬的包是不可見的;

protected[this],訪問權限僅限當前的對象

可以使用包修飾符改變protected修飾的成員的可見性

5.3.3. 類型檢查和轉換


Scala

Java

測試某個對象是否屬於給定的類

obj.isInstanceOf[C]

obj instanceof C

強制類型轉換

obj.asInstanceOf[C]

(C)obj

獲取對象的類信息

classOf[C]

C.class

5.3.4. 超類的構造

下面代碼定義了一個子類和一個調用超類構造器的主構造器

class Employ(name: String, age: Int, val Salary:Double) extends Person (name,age)

下面的代碼展示類的繼承,以及接口的實現等

object ClassDemo {
    def main(args: Array[String]) {
      val h = new Human
      println(h.byScala())
    }
  }
  //相當於Java的接口
  trait Coding{
    def byJava(flag : Boolean): Unit ={
      if(flag)
      {
        println("I can code by Java")
      }
      else{
          println("I can't code by Java")
      }
    }
    //未被實現的方法默認爲抽象方法
    def byScala(): String
  }

  //抽象類
  abstract class Animal {
    def run(): Int
    val name: String
  }

  class Human extends Animal with Coding{

    val name = "abc"

    //打印幾次"ABC"?
    val t1,t2,(a, b, c) = {
      println("ABC")
      (1,2,3)
    }

    println(a)
    println(t1._1)

    //在Scala中重寫一個非抽象方法必須用override修飾
    override def byJava(flag: Boolean): Unit = {
      println("Coding by Java and Scala")
    }

    def byScala(): String={
      "coding by Scala"
    }
    //在子類中重寫超類的抽象方法時,不需要使用override關鍵字,寫了也可以
    def run(): Int = {
      1
    }

}

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章