> For the complete documentation index, see [llms.txt](https://yubin551.gitbook.io/java-note/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yubin551.gitbook.io/java-note/basic-object-oriented/class_object.md).

# 類別、物件

> 定義好在Java上物件導向的基本名詞，以及類別與物件的關係。

## 類別 class

類別定義物件的屬性、方法，利用類別可以產生物件。

## 物件 object

物件有它所屬的屬性及方法，在記憶體佔有空間，物件導向的概念就是把真實世界抽象化為許多的物件，物件之間彼此會交互運作。

## 定義類別

Java是純物件導向的程式語言，而物件透過類別產生的，因此我們最一開始要先定義好我們的類別。

定義類別的方法：

```java
class 類別名稱{
    // 定義屬性
    // 定義方法
}
```

這是最簡單的類別定義，我們試著把它想像成現實世界的情況：

```java
class 人類{
    姓名、年齡、身高;
    吃飯()、睡覺();
}
```

在上面的範例中，人類這個類別有三個屬性：姓名、年齡、身高，以及兩個方法：吃飯、睡覺。

## 創造物件

有了定義好的類別後，就可以來創造物件，創造物件分成兩個部份：

1. 宣告
2. 初始化

```java
類別名稱 物件名稱;              //宣告
物件名稱 = new 類別建構子();    //初始化
```

以上面定義好的人類類別來舉例：

```java
人類 小木;
小木 = new 人類();
```

也可以寫成一行，這也是一般人常見到的用法：

```java
人類 小木 = new 人類();
```

此時在記憶體中的配置如圖所示：

![](https://1201963393-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MLRnhT9aTkN9HvaBP28%2Fsync%2F9bd942dfed2a7da837e3eccacc29bf34cd05214f.jpg?generation=1604653625249562\&alt=media)

如果只有宣告物件，那只會在記憶體中配置一塊記憶體，叫做該物件的名稱。如上圖中左手邊的部份。

物件名稱透過 new 這個關鍵字，利用『建構子』進行初始化。會依照事先定義好的類別在記憶體中劃一塊空間，然後將該空間的記憶體地址回傳給物件名稱，此時物件名稱就與真正的類別定義好的欄位跟方法連結起來，就像上圖的紅色箭頭。

這樣就完成我們所預期的目標了：創造一個名叫小木的人類，具備有人類的所有屬性及方法。 這個動作也稱為物件的實體化(instantiated)。

一個實體(實例、instance)就是在記憶體中佔有空間的一個物件。
