---
# System prepended metadata

title: Java --- Class(一) --- Project(2)
tags: [教學, java]

---

Java --- Class(一) --- Project(2)
===

## class中的property和method封裝等級

### 封裝等級類 (4種)
* #### **public** :所有人可以使用
* #### **protected** :同package可以使用,繼承關係可使用
* #### **package(none)** :不設定封裝等級的預設,同package可使用
* #### **private** :只有自己可以使用

越內圈的等級能使用的人越少![封裝存取範圍](https://i.imgur.com/mMkrwC7.jpg =50%x)

---

## 對property或method的修飾字
#### **可與封裝等級一起使用** For instance:
`public static void foo(int k){...}`

### 修飾字類 (5種):
* ### **static**:
    * #### 使用在**property** : Example: `static int k;`
    若無static修飾會在此class被 ==實作(new)== 時才會分配memory,而有static修飾則會在 ==程式一開始執行時== 就分配memory,有全域變數的感覺.
    * #### 使用在**method** : Example: `static void foo(){...}`
    跟修飾變數一樣,當修飾函數時,會在程式一開始時就分配memory給此函數,因此只有有權限(封裝等級)就能直接使用.
* ### **final**
    * #### 使用在**property** : Example `final float pi;`
    意即此變數為最後版本,表示只 ==接受被更改一次== 即設定初值後不可變更,與C語言的 `#define pi;` 有一樣功能,但不允許到程式最後仍沒給定值,compiler不會過.
    * #### 使用在**method** : Example `final void foo(){...}`
    意即此函數為最後版本,不可再被繼承,較少用.
* ### **abstract**
Example: `public abstract void foo();`
此函數不需要被實作,繼承者必須完成實作方法(Override).
*Note:* Override回傳型態必須相同(Output),而Input不一定要相同因為有可能自動轉型
* ### **native**
不實作,用來引入其他語言(e.g C,C++)
* ### **synchronzied**
還沒使用過


###### tags: `java` `教學` 


