好程式設計師大資料教程Scala系列之繼承

好程式設計師IT發表於2019-10-12

好程式設計師大資料教程 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
    }

}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2659738/,如需轉載,請註明出處,否則將追究法律責任。

相關文章