類和物件

柒寒(平安)發表於2024-08-14

類和物件的概念

類的定義

類是一種使用者自定義的資料型別,它是建立物件的藍圖,定義了一組屬性(稱為“欄位”)和方法(稱為“函式”)。類是物件導向程式設計的基本構建塊,它封裝了資料和行為。

物件的建立

物件是類的例項,它是類的具體化。物件具有類定義的屬性(欄位)和方法(函式),並且可以訪問和修改這些屬性。透過“new”關鍵字建立物件。

成員變數(屬性)

成員變數是類的屬性,它們可以是靜態變數(靜態成員變數)或非靜態變數(非靜態成員變數)。

/*類的定義和物件的建立*/
// 類的定義
public class MyClass {
    // 成員變數
    private int myVar;
// 構造器(無參)
public MyClass() {
    this.myVar = 0;
}

// 構造器(有參)
public MyClass(int var) {
    this.myVar = var;
}

// 成員方法
public int getMyVar() {
    return myVar;
}

public void setMyVar(int var) {
    this.myVar = var;
}
}
// 物件的建立(無參)
MyClass obj1 = new MyClass();

// 物件的建立(有參)
MyClass obj2 = new MyClass(10);
  • 靜態變數:靜態變數屬於類,而不是特定的物件。它們在類載入時建立,而不是在建立物件時建立。靜態變數可以使用類名直接訪問。

  • 非靜態變數:非靜態變數屬於類的例項,而不是類。它們在建立物件時建立,而不是在類載入時建立。要訪問非靜態變數,需要建立類的例項並使用例項名訪問。

    // 類的定義
    public class MyClass {
        // 靜態變數
        private static int staticVar;
    // 非靜態變數
    private int nonStaticVar;
    
    // 構造器
    public MyClass(int var) {
        this.nonStaticVar = var;
    }
    
    // 靜態方法(獲取靜態變數)
    public static int getStaticVar() {
        return staticVar;
    }
    
    // 靜態方法(設定靜態變數)
    public static void setStaticVar(int var) {
        staticVar = var;
    }
    
    // 非靜態方法(獲取非靜態變數)
    public int getNonStaticVar() {
        return nonStaticVar;
    }
    
    // 非靜態方法(設定非靜態變數)
    public void setNonStaticVar(int var) {
        this.nonStaticVar = var;
    }
    }
    
    // 訪問靜態變數
    int staticVarValue = MyClass.getStaticVar();
    
    // 訪問非靜態變數
    MyClass obj = new MyClass(10);
    int nonStaticVarValue = obj.getNonStaticVar();
    

成員方法(函式、方法)

成員方法是類的函式,它們可以靜態方法(靜態成員方法)或非靜態方法(非靜態成員方法)。

  • 靜態方法:靜態方法屬於類,而不是特定的物件。它們可以直接使用類名呼叫,而不需要建立類的例項。靜態方法通常用於操作靜態變數或執行與物件無關的操作。

  • 非靜態方法:非靜態方法屬於類的例項,而不是類。要呼叫非靜態方法,需要建立類的例項並使用例項名呼叫。非靜態方法通常用於操作物件的屬性和執行與物件相關的操作。

    // 類的定義
    public class MyClass {
        // 靜態方法
        public static void staticMethod() {
            System.out.println("This is a static method.");
        }
    
        // 非靜態方法
        public void nonStaticMethod() {
            System.out.println("This is a non-static method.");
        }
    
    }
    
    // 呼叫靜態方法
    MyClass.staticMethod();
    
    // 建立物件
    MyClass obj = new MyClass();
    
    // 呼叫非靜態方法
    obj.nonStaticMethod();
    

物件的例項化

構造器

構造器是一種特殊的方法,用於在建立物件時初始化物件。構造器的名稱與類名相同,沒有返回型別,並且通常包含對成員變數的初始化。

構造器的使用

使用“new”關鍵字建立物件,並在括號中傳遞引數(如果有)。例如:

MyClass obj = new MyClass(param1, param2);

構造器過載

構造器過載是指在同一個類中定義多個構造器,每個構造器具有不同的引數列表。這允許建立具有不同初始狀態的物件。

匿名物件

匿名物件是不具有名稱的物件,它們通常用於一次性使用。例如,當傳遞一個物件作為引數,但不需要該物件在其他地方使用時,可以使用匿名物件。例如:

someFunction(new MyClass(param1, param2));
// 類的定義
public class MyClass {
    private int myVar;

    public MyClass(int var) {
        this.myVar = var;
    }
    
    public int getMyVar() {
        return myVar;
    }

}

// 使用匿名物件
MyClass obj = new MyClass(10);
int value = obj.getMyVar();

Java中物件的銷燬

在Java中,當一個物件不再被引用時,它將被垃圾回收器(GC)銷燬。垃圾回收器會自動檢測不再使用的物件,並釋放其記憶體。

總結

類是一種使用者自定義的資料型別,用於建立具有屬性和行為的物件。物件是類的例項,它們具有類定義的屬性和方法。成員變數是類的屬性,可以是靜態變數或非靜態變數。成員方法是類的函式,可以是靜態方法或非靜態方法。

物件透過構造器進行例項化,構造器用於初始化物件的屬性。可以對構造器進行過載以建立具有不同初始狀態的物件。在Java中,當一個物件不再被引用時,它將被垃圾回收器銷燬。

匿名物件是不具有名稱的物件,它們通常用於一次性使用。

類與類之間的關係(UML)

在統一建模語言(Unified Modeling Language,簡稱UML)中,類與類之間的關係是UML的核心概念之一,用於表示系統中不同元素之間的相互作用。以下是一些基本的類關係型別:

  1. 關聯(Association):表示兩個類之間的連線,通常用來描述物件之間的關係。關聯可以是單向的或雙向的,並且可以有多重性(例如,一個班級可以關聯多個學生,一個學生可以屬於一個班級)。

  2. 聚合(Aggregation):是一種特殊的關聯,表示整體與部分的關係,但部分可以獨立於整體存在。例如,一個公司可以聚合多個部門,但部門在沒有公司的情況下也可以存在。

  3. 組合(Composition):也是整體與部分的關係,但與聚合不同,部分不能獨立於整體存在。如果整體被銷燬,部分也會被銷燬。例如,一輛車由多個部件組成,如果車被銷燬,部件也會隨之銷燬。

  4. 繼承(Inheritance):表示一個類(子類)可以繼承另一個類(父類)的屬性和行為。子類是父類的一個特化,可以新增自己的屬性和行為。

  5. 實現(Realization):表示一個類實現了一個介面。介面定義了一組操作,而實現類提供了這些操作的具體實現。

  6. 依賴(Dependency):表示一個類(依賴類)在某種程度上依賴於另一個類(被依賴類)。這種關係通常是暫時的或條件性的,例如,一個類的方法可能需要另一個類的物件作為引數。

  7. //泛化(Generalization):是繼承的另一種表述方式,表示子類是父類的一個特例。

  8. //友元(Friend):在某些程式語言中,一個類可以宣告另一個類為其友元,這樣友元類就可以訪問它的私有成員。

  9. //多重繼承(Multiple Inheritance):某些語言允許一個類繼承多個父類,這在UML中也可以表示,但要注意,這可能導致複雜的繼承關係和問題。

這些關係在UML類圖中用不同的圖形符號表示,以便於視覺化和理解類之間的關係。

相關文章