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` `教學`