接口interface修饰符相关问题总结
1、抽象類中的抽象方法(其前有abstract修飾)不能用private、static、synchronized、native訪問修飾符修飾。
原因如下:
- 抽象方法沒有方法體,是用來被繼承的,所以不能用private修飾;
- static修飾的方法可以通過類名來訪問該方法(即該方法的方法體),抽象方法用static修飾沒有意義;
- 使用synchronized關鍵字是為該方法加一個鎖。而如果該關鍵字修飾的方法是static方法。則使用的鎖就是class變量的鎖。如果是修飾類方法。則用this變量鎖。但是抽象類不能實例化對象,因為該方法不是在該抽象類中實現的。是在其子類實現的,所以,鎖應該歸其子類所有。所以,抽象方法也就不能用synchronized關鍵字修飾了;
- native,這個東西本身就和abstract沖突,他們都是方法的聲明,只是一個吧方法實現移交給子類,另一個是移交給本地操作系統。如果同時出現,就相當于即把實現移交給子類,又把實現移交給本地操作系統,那到底誰來實現具體方法呢?
擴展:
類、方法、成員變量和局部變量的可用修飾符
| abstract(抽象的) | √ | √ | - | - | - | |
| static (靜態的) | - | √ | - | √ | - | |
| public(公共的) | √ | √ | √ | √ | - | |
| protected(受保護的) | √ | √ | √ | - | ||
| private(私有的) | - | √ | √ | √ | - | |
| synchronized(同步的) | - | √ | - | - | - | |
| native(本地的) | - | √ | - | - | - | |
| transient(暫時的) | - | - | - | √ | - | |
| volatie(易失的) | - | - | - | √ | - | |
| final(不要改變的) | √ | √ | - | √ | √ | |
| Public | 可以從其他類中訪問 |
| Abstract | 本類不能被實例化 |
| Final | 不能再聲明子類 |
| 構造函數修飾符 | |
| Public | 可以從所有的類中訪問 |
| Protected | 只能從自己的類和它的子類中訪問 |
| Private | 只能在本類中訪問 |
| 域/成員變量修飾符 | |
| Public | 可以從所有的類中訪問 |
| Protected | 只能從本類和它的子類中訪問 |
| Private | 只能從本類中訪問它 |
| Static | 對該類的所有實例只能有一個域值存在 |
| transient | 不是一個對象持久狀態的一部份 |
| Volatile | 可以被異步的線程所修改 |
| final | 必須對它賦予初值并且不能修改它 |
| 局部變量 修飾符 | |
| final | 必須對它賦予初值并且不能修改它 |
| 方法修飾符 | |
| Public | 可以從所有的類中訪問它 |
| Protected | 只能從本類及其子類中訪問它 |
| Private | 只能從本類中訪問它 |
| abstract | 沒有方法體,屬于一個抽象類 |
| final | 子類不能覆蓋它 |
| static | 被綁定于類本身而不是類的實例 |
| native | 該方法由其他編程語言實現 |
| asnchronized | 在一個線程調用它之前必須先給它加 |
類的修飾符整合
一.類
類的修飾符:
Public:可以在其他任何類中使用,默認為統一包下的任意類。
Abstract:抽象類,不能被實例化,可以包含抽象方法,抽象方法沒有被實現,無具體功能,只能衍生子類。
Final:不能被繼承。
二.變量
變量修飾符:
一個類的成員變量的聲明必須在類體中,而不能在方法中,方法中聲明的是局部變量。
可訪問修飾符
static:類變量:一個類所擁有的變量,不是類的每個實例有的變量。類變量是指不管類創建了多少對象,系統僅在第一次調用類的時候為類變量分配內存,所有對象共享該類的類變量,因此可以通過類本身或者某個對象來訪問類變量。
final:常量。
volatile:聲明一個可能同時被并存運行的幾個線程所控制和修改的變量。
實例變量:和類變量對應,即每個對象都擁有各自獨立的實例變量。
三.方法:(和變量對象分為實例方法和類方法,并用有無static修飾區別)
類方法:使用static關鍵字說明的方法
1.第一次調用含類方法的類是,系統只為該類創建一個版本,這個版本被該類和該類的所有實例共享。
2.類方法只能操作類變量,不能訪問實例變量。類方法可以在類中被調用,不必創建實例來調用,當然也可以通過對象來調用。
實例方法:實例方法可以對當前對象的實例變量操作,而且可以訪問類變量。
方法可以重載,要求:方法名相同,但是參數必須有區別。(參數不同可以使類型不同,順序不同,個數不同)
方法中的變量作用域:
成員變量:整個類。
局部變量:定義起到方法塊結束為止。
方法參數:整個方法或者構造方法。
異常處理參數:參數傳遞給異常處理方法。
構造方法:和類同名的方法。為新建對象開辟內存空間后,用于初始化新建的對象。不能用對象顯式的調用。
靜態初始化器:格式:static{<賦值語句組>}
靜態初始化器與構造方法的區別:
| 對類的靜態域初始化 | 對新建的對象初始化 |
| 類進入內存后,系統調用執行 | 執行new后自動執行 |
| 屬特殊語句(僅執行一次) | 屬特殊方法 |
方法的修飾符:
抽象方法:用abstract修飾,只有聲明部分,方法體為空,具體在子類中完成。
類方法:靜態方法,用static修飾,
調用時,使用類名作為前綴,而不是類的某個實例對象名
不能被單獨對象擁有,屬于整個類共享。
不能處理成員變量(靜態只能調用靜態)。
最終方法:用final修飾,不能被子類重新定義的方法。
本地方法:用native修飾的方法,表示用其他語言書寫的特殊方法,包括C,C++,FORTRAN,匯編語言等。
四.類成員的訪問控制符:
即類的方法和成員變量的訪問控制符,一個類作為整體對象不可見,并不代表他的所有域和方法也對程序其他部分不可見,需要有他們的訪問修飾符判斷。
權限如下:
| private | √ | |||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
| 默認 | √ | √ |
總結
以上是生活随笔為你收集整理的接口interface修饰符相关问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Github热榜--《程序员做饭指南》
- 下一篇: 那些离开工业界,回归学术界的AI科学家们