# 基本結構

# 外部類別

我們可以把多個類別定義在同一個檔案中:

class A{
    // 程式碼...
}
class B{
    // 程式碼...
}

# 內部 (巢狀) 類別

巢狀的意思是,類別裡面又定義了類別。感覺像類別包著類別,程式看起來是這樣:

class Outer{
    class Inner{
    }
    class Inner2{
    }
}

最外層的 class 被稱為外部類別 (outer class),
裡面定義的稱為內部類別 (inner class)。

# 內部類別的使用

假設有一個 Human 類別:

class Human {
    String name;
    public Human(String str) {
        name = str;
    }
    class Wearing {
        String color;
        char size;
    }
}

如果要創建內部類別的物件的話,我們可以這麼去使用:

基本結構
外部類別.內部類別 物件名稱 = 外部物件.new 建構子();
範例運用
public class HumanTest {
    public static void main(String[] args){
        Human zrn = new Human("Zrn");
        Human.Wearing wear = zrn.new Wearing();
        wear.color="white";
        wear.size='s';
    }
}

這方法不是我們最常用的方法~~

# 透過公開方法設定內部類別

假設我的 Human 裡面有個欄位 wearWearing 物件,我只開放某個方法可以讓別人設定這個 wear 的值,而不能讓別人直接存取或創造物件:

class Human {
    private String name;    // 設為 private 私有,不讓別人直接存取到
    private Wearing wear;   // 這個 wear 是內部類別 Wearing 的物件,是 Human 的欄位
    public Human(String str) {  //public,公開此建構子
        name = str;
        wear = new Wearing();   //wear 是物件,還是需要利用 new 初始化
    }
    private class Wearing {  //private,不讓別人利用此類別建立物件
        String color;
        char size;
    }
    public void setWear(String c, char s) {  // 開放此方法,別人只能透過這個方法設定 wear
        wear.color = c;
        wear.size = s;
    }
    public String getWear() {  // 開放此方法,別人只能透過此方法取得 wear 的內容
        return name+" 穿的服裝顏色是:" + wear.color + " 尺寸是:" + wear.size;
    }
}
class Test {
    public static void main(String[] args) {
        Human zrn = new Human("Zrn");
        zrn.setWear("white", 's');
        System.out.println(zrn.getWear());
    }
}

執行結果

Zrn的服裝顏色:white,尺寸:s

這樣設計的好處除了防止別人亂用你的類別外,還可以確保內部的資料備正確的使用。

這樣的使用就有著物件導向 封裝 的精神,可以同時保證程式的安全性以及完整性。

更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay