全部產品
Search
文件中心

OpenSearch:Cava 類與對象

更新時間:Jul 13, 2024

簡介

cava語言支援類的定義和對象的使用。主要支援物件導向編程中的以下概念:

  • 封裝

  • 抽象

  • 對象

  • 執行個體

  • 方法

cava中物件導向模組的文法設計,與Java和C#語言基本一致。

樣本

定義一個名為 Example 的類,在入口函數中建立相應的對象 example ,並訪問其身上的成員 PI

class Example {  // <==
    double PI;
    Example() {
        PI = 3.1415926;
    }
    static int main() {
        Example example = new Example(); 
        double a = example.PI; //a的值為3.1415926
        return 0;
    }
}

功能介紹

類的定義

類的定義由 class 關鍵字開始,內部主要包含以下操作:

  • 定義成員變數:定義承載對象中資料的變數

  • 定義建構函式:對象建立完畢後負責對象資料的初始化

  • 定義成員函數:定義函數作為訪問對象的方法

  • 定義類函數:定義類層級函數,被所有對象共用,並可以直接通過類名訪問

class Example {        // 定義類Example
    public double PI;  // 定義成員變數
    Example() {        // 定義建構函式
        PI = 3.1415926;
    }
    double getPI() {   // 定義成員函數
        return PI;
    }
    static int main() {
        Example example = new Example();
        double a = example.getPI(); //a的值為3.1415926
        return 0;
    }
}

建立對象

當類定義完畢後,即可開始使用類來建立對象。建立對象主要包含以下三步:

  • 聲明:聲明一個變數,並指定變數對應的類型

  • 執行個體化:結合內建關鍵字 new 來產生一個新的對象

  • 初始化: new 關鍵字後緊跟的函數確定了對象建立後使用的建構函式,建構函式承擔了對象資料的初始化任務

以下是一個例子,注意在 main 函數的第一行,我們使用剛剛定義的 Example 類型建立了一個對象,並將其儲存在一個名為 example 的變數中。對象建立完畢後,可以使用 example 變數訪問對象上的資料成員。

class Example {
    double PI;
    Example() {
        PI = 3.1415926;
    }
    static int main() {
        Example example = new Example(); 
        return 0;
    }
}

成員變數

以下例子中定義了一個名為 PI 、類型是 double 的成員變數:

class Example {
    double PI; // <==
    Example() {
        PI = 3.1415926;
    }
}

注意:暫不支援在成員變數定義時指定初始化值,成員變數初始化請在建構函式中完成。

class Example {
    double PI = 3.1415926; //目前不支援在定義成員變數時進行初始化
}

建構函式

在cava中,建構函式是一種特殊的成員函數。建構函式有以下兩個要求:

  • 建構函式的名稱必須和類名一致

  • 建構函式沒有傳回值,且不可以指定傳回值

建構函式在對象建立後會自動被調用,執行建構函式內的指令完成對象資料的初始化。cava中支援定義多個建構函式,每次物件建構會根據 new 後語句的形式,選擇相應建構函式進行初始化。在以下例子中,我們在入口函數 main 中構造了兩個對象,其中第一個對象使用建構函式A初始化,初始化完畢後,成員 PI 的值為 3.1415926 ;第二個函數使用建構函式B初始化,初始化完畢後,成員 PI 的值為使用者傳入的 3.14

class Example {
    public double PI;
    Example() { // <== A
        this.PI = 3.1415926;
    }
    Example(double customPI) { // <== B
        this.PI = customPI;
    }
    double getPI() {
        return PI;
    }
    static int main() {
        Example example1 = new Example(); // 使用建構函式A進行初始化
        double a = example1.getPI();
        Example example2 = new Example(3.14); // 使用建構函式B進行初始化
        double b = example2.getPI()
        return 0;
    }
}

註:建構函式支援重載

成員函數

成員函數提供了對成員變數操作的封裝,對象的使用者通過調用成員函數,來讀取和修改對象的成員變數。在成員函數的定義中,可以直接存取成員變數。如果函數範圍記憶體在另一個同名變數,則通過該變數名訪問時會優先使用函數範圍內的變數。此類情況可以通過在變數前添加 this 首碼,來限定使用成員變數。

class Example {
    public double PI;
    Example() {
        this.PI = 3.1415926;
    }
    void getPI() {
        return PI;
    }
    static int main() {
        Example example = new Example();
        double a = example.getPI();
        return 0;
    }
}

註:成員函數支援函數重載。在類中可以定義多個同名成員函數,編譯器會在函數的調用處,根據調用參數的類型和個數選擇出最匹配的函數,執行調用。

類函數

類函數是屬於類的函數,且被所有該類的成員共用。類函數通過在函數定義中增加 static 修飾符建立,並可以直接通過類來訪問,無需建立相應對象,而成員函數必須通過對象訪問。

class Example {
    static double getPI() { // <==
        return 3.1415926;
    };
    static int main() {
        double a = Example.getPI();
        return 0;
    }
}

繼承和多態

cava暫時不支援類的繼承。