iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

轉職仔自學Java筆記本系列 第 16

Modifiers 修飾符

  • 分享至 

  • xImage
  •  

昨天針對 Java class 應該有了基礎的認識,應該有發現先前提到的屬性 (Property) 與方法 (Method) 除了命名外,前頭還有一些描述像是 public, private 等等,接下來統一整理一下 Java 中的修飾符。

修飾符 (modifier) 可以用於提供有關類別 (Class)、方法 (Method) 或屬性 (Property) 的額外信息。Modifiers被分成兩類:

  • 訪問修飾符 (access modifier): 控制訪問級別。
  • 非訪問修飾符 (Non-Access Modifiers) :非控制訪問級別,提供其他資訊或使用方式。

Modifier of Class 類別修飾符

  1. 訪問修飾符 (access modifier):

    (1) public:
    代表這個 Class 可以被任何其他 Class 訪問,每一個 .java 檔案只能有一個 public class。

    (2) private :
    代表這個 Class 只能同個 .java 檔案中被調用。

  2. 抽象類別修飾符 abstract:
    屬於 Non-Access Modifiers,被定義為 abstract 的 class 無法被實體化成物件 (Object)。但是可以提供其他的 class 繼承其方法與屬性。

https://ithelp.ithome.com.tw/upload/images/20231002/20162254NIqNUa5XDm.png

舉例來說,如果有一個 class 為水果類別 (fruits),可以提供屬於水果的方法與屬性給檸檬類別(lemon class), 蘋果類別 (apple class) 與葡萄類別 (grape class) 繼承,但我們知道實際上不會真的有水果叫作水果,因為他是一個抽象的概念而不該被實體化,所以可以將水果類添加上 abstract 的修飾,以防被使用者拿來創建物件 (Object)。

  1. 最終型態修飾符 final:
    屬於 Non-Access Modifiers,被 final 修飾的類別不得被繼承。

Modifier of Methods & Property 方法與屬性修飾符

  1. 訪問修飾符 (access modifier):
    (1) public:可以從任何地方訪問。
    (2) private : 只能在自己的 class 中被訪問。
    (3) protected: 可以在同一個 package 中或不同package裡的子類別 ( subclass )訪問。

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 修飾的方法。


上一篇
Java Class
下一篇
物件導向設計與 Java
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言