# 基本結構
# 外部類別
我們可以把多個類別定義在同一個檔案中:
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
裡面有個欄位 wear
是 Wearing
物件,我只開放某個方法可以讓別人設定這個 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 |
這樣設計的好處除了防止別人亂用你的類別外,還可以確保內部的資料備正確的使用。
這樣的使用就有著物件導向 封裝 的精神,可以同時保證程式的安全性以及完整性。