昨天針對 Java class 應該有了基礎的認識,應該有發現先前提到的屬性 (Property) 與方法 (Method) 除了命名外,前頭還有一些描述像是 public, private 等等,接下來統一整理一下 Java 中的修飾符。
修飾符 (modifier) 可以用於提供有關類別 (Class)、方法 (Method) 或屬性 (Property) 的額外信息。Modifiers被分成兩類:
訪問修飾符 (access modifier):
(1) public:
代表這個 Class 可以被任何其他 Class 訪問,每一個 .java 檔案只能有一個 public class。
(2) private :
代表這個 Class 只能同個 .java 檔案中被調用。
抽象類別修飾符 abstract:
屬於 Non-Access Modifiers,被定義為 abstract 的 class 無法被實體化成物件 (Object)。但是可以提供其他的 class 繼承其方法與屬性。
舉例來說,如果有一個 class 為水果類別 (fruits),可以提供屬於水果的方法與屬性給檸檬類別(lemon class), 蘋果類別 (apple class) 與葡萄類別 (grape class) 繼承,但我們知道實際上不會真的有水果叫作水果,因為他是一個抽象的概念而不該被實體化,所以可以將水果類添加上 abstract 的修飾,以防被使用者拿來創建物件 (Object)。
2.最終型態修飾符 final:
屬於 Non-Access Modifiers,final 修飾的屬性不得被改變,方法則不得被重寫。
3.靜態修飾符 static :
屬於 Non-Access Modifiers,static 修飾的屬性與方法所屬於類別 (class) 本身,非屬於被製作出來的物件,所以當被製作出來的物件調用這些方法與變數時,都是取用同一份。
// 創建一個圓形的類別
class Cicle(int radius){
private static final int PI=3.14; //靜態屬性屬於類別 Cicle
private int radius;
cicle(int radius){
this.radius = radius;
}
}
// 靜態屬性 PI 屬於類別可以用類別訪問
Cicle.PI // 3.14
// 靜態屬性也可以通過實體化的物件訪問
Cicle a1 = new Cicle(10); //實體化一個半徑為10的圓形物件
Cicle a2 = new Cicle(100); //實體化一個半徑為100的圓形物件
a1.PI // 3.14
a2.PI // 3.14
因為 PI 為靜態屬性屬於類別所有,所以無論是 a1, a2 實際上訪問的位置都是同一個記憶體位置,並不會因為實體化新的物件而創建了新的 PI;但半徑 (radius) 屬於物件所有,每創建一個新的物件,就會有新的 radius 被存放到新的記憶體位置。
4.抽象類別修飾符 abstract:
屬於 Non-Access Modifiers,只能使用於 abstract class 中的方法(methods),如果有其他類別繼承了該 abstract class,則會被要求一定要重寫有 abstract 修飾的方法。