<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **1. 定義類的基礎語法:** ``` // 主構造器 class ClassName(參數列表) { 輔助構造器 成員變量 成員方法 } ``` <br/> **2. 定義類** (1)寫法1 ```scala // 主構造器 // Point1(xc:Int, yc:Int)是該類的主構造器 class Point1(xc:Int, yc:Int) { // 字段 var x:Int = xc; var y:Int = yc; // 輔助構造器,相當于Java中構造器的重載 def this() = { this(0, 0) // 輔助構造器的第一句必須調用該類已存在的構造器,不一定是主構造器 } // 成員方法 def move(dx:Int, dy:Int):Unit={ x = x + dx; y = y + dy; } } ``` (2)寫法2 ```scala class Point1(var x:Int, var y:Int) { // 自動生成為類的字段 // 字段。可以寫,也可以不寫了,因為會隱式地自動生成 // var x:Int = xc; // var y:Int = yc; def this() = { this(0, 0) } def move(dx:Int, dy:Int):Unit={ xc = xc + dx; yc = yc + dy; } } ``` **3. 調用** 對于類先要`new`才能調用它的字段和方法。 ```scala import org.example.oop.Point1 object App{ def main(args: Array[String]): Unit = { // 實例化對象 val point1 = new Point1(10, 10) println(point1.x) // 10 println(point1.y) // 10 point1.move(20, 20) println(point1.x) // 30 } } ``` **4. 關于類的細節** Scala代碼由Java編譯器進行編譯,查看編譯后的Java代碼如下(無論是寫法1還是寫法2都基本一樣的)。 ```java package org.example.oop; import scala.reflect.ScalaSignature; @ScalaSignature(bytes="\002\0") // 1. 定義的類的訪問權限默認為public public class Point1 { // 2. 成員變量默認訪問權限是private private int x; private int y; // 3. 自動為成員變量提供類似于Java中的Getter方法,并且訪問權限是public // 在上面我們point1.x,調用的其實是這個方法,而不是字段 public int x(){ return this.x; } // 4. 自動為成員變量提供類似于Java中的Setter方法,并且訪問權限是public // x_$eq,與 x_= 是同一個方法名 public void x_$eq(int x$1) { this.x = x$1; } public int y() { return this.y; } public void y_$eq(int x$1) { this.y = x$1; } // 5. 成員方法的默認訪問權限為public public void move(int dx, int dy) { x_$eq(x() + dx); y_$eq(y() + dy); } // 6. 根據成員變量自動提供了兩個參數的構造器,并且默認訪問權限默認為public public Point1(int x, int y) { } // 7. 根據輔助構造器自動提供了無參構造器,默認訪問權限為public public Point1() { this(0, 0); } } ``` 1. **`this`:** 在Scala 中,`this`是關鍵字,用于引用當前對象。可以使用 this 調用實例變量、方法、構造器。 2. 如果不指定訪問修飾符,除了字段是`private`外,其它都是`public`,當然你也可以指定為`private`或`protected`。 3. Scala 類中無法定義靜態成員和方法,因為沒有 `static` 關鍵字。 4. 在Scala中,無論是字段或者成員方法,統一稱為成員變量。 5. 在Scala中,方法使用`def`關鍵字定義,任何方法的參數列表的關鍵字都是`val`,所以你不能對該參數賦值,如下: ```scala def method(x:Int, y:Int){ // 不能對參數進行賦值 x = 10 y = 10 } // 方法的參數列表不能使用var或val修飾 def method(var x:Int, val y:Int) {} ``` 6. 統一訪問原則: 當方法無參時與字段的調用是一樣的,比如方法`def method():Unit = println("")`是無參的,它可以`obj.method()`調用或者`obj.method`調用,如果調用字段一樣。 7. 對于無參構造器,可以`new Point()`,也可以`new Point`實例化。 8. 對于無參成員方法,其實可以將關鍵字`def`轉換為`val`或者`var`,如下: ```scala def method():Unit = { println(1000) } var method = { println(1000) } val method = { println(1000) } ``` 區別在于,方法每次調用都會重新計算,而字段只在初始化時被計算,所以字段的運行效率比方法效率高。 9. 對于`val`定義的字段,Scala自動創建該字段的Getter方法,但是沒有Setter方法;對于`var`定義的字段,則兩者都會自動創建。 10. 如果字段使用`val`修飾則不能對其賦值,如下: ```scala class Point1(val x:Int, var y:Int) {} val point1 = new Point1 point1.x = 1000 // 編譯報錯 point1.y = 1000 // 編譯通過 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看