1. 程式人生 > >抽象類 介面 以及修飾符的總結

抽象類 介面 以及修飾符的總結

1、抽象類中的抽象方法(其前有abstract修飾)不能用private、static、synchronized、native訪問修飾符修飾。原因如下:抽象方法沒有方法體,是用來被繼承的,所以不能用private修飾;static修飾的方法可以通過類名來訪問該方法(即該方法的方法體),抽象方法用static修飾沒有意義;使用synchronized關鍵字是為該方法加一個鎖。。而如果該關鍵字修飾的方法是static方法。則使用的鎖就是class變數的鎖。如果是修飾類方法。則用this變數鎖。但是抽象類不能例項化物件,因為該方法不是在該抽象類中實現的。是在其子類實現的。所以。鎖應該歸其子類所有。所以。抽象方法也就不能用synchronized關鍵字修飾了;native,這個東西本身就和abstract衝突,他們都是方法的宣告,只是一個吧方法實現移交給子類,另一個是移交給本地作業系統。如果同時出現,就相當於即把實現移交給子類,又把實現移交給本地作業系統,那到底誰來實現具體方法呢?


 

2、介面是一種特殊的抽象類,介面中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象類中的抽象方法不能用的訪問修飾符這裡也不能用。而且protected訪問修飾符也不能使用,因為介面可以讓所有的類去實現(非繼承),不只是其子類,但是要用public去修飾。介面可以去繼承一個已有的介面。

 

題考察修飾符,函式定義等,故從網上搜羅了下相關資料,總結如下:

 

類、方法、成員變數和區域性變數的可用修飾符

修飾符

成員訪求

構造方法

成員變數

區域性變數

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:不能被繼承。

二.變數

變數修飾符:

一個類的成員變數的宣告必須在類體中,而不能在方法中,方法中宣告的是區域性變數

1.       可訪問修飾符:

2.       static類變數:一個類所擁有的變數,不是類的每個例項有的變數。類變數是指不管類建立了多少物件,系統僅在第一次呼叫類的時候為類變數分配記憶體,所有物件共享該類的類變數,因此可以通過類本身或者某個物件來訪問類變數。

3.       final常量

4.       volatile:宣告一個可能同時被並存執行的幾個執行緒所控制和修改的變數。

例項變數:和類變數對應,即每個物件都擁有各自獨立的例項變數。

三.方法:(和變數物件分為例項方法和類方法,並用有無static修飾區別)

類方法:使用static關鍵字說明的方法

1.第一次呼叫含類方法的類是,系統只為該類建立一個版本,這個版本被該類和該類的所有例項共享。

2.類方法只能操作類變數,不能訪問例項變數。類方法可以在類中被呼叫,不必建立例項來呼叫,當然也可以通過物件來呼叫。

例項方法:例項方法可以對當前物件的例項變數操作,而且可以訪問類變數。

方法可以過載,要求:方法名相同,但是引數必須有區別。(引數不同可以使型別不同,順序不同,個數不同)

方法的返回型別:若無返回型別,則宣告為void.

方法中的變數作用域:

1.       成員變數:整個類。

2.       區域性變數:定義起到方法塊結束為止。

3.       方法引數:整個方法或者構造方法。

4.       異常處理引數:引數傳遞給異常處理方法。

構造方法:和類同名的方法。為新建物件開闢記憶體空間後,用於初始化新建的物件。不能用物件顯式的呼叫。

靜態初始化器:格式:static{<賦值語句組>}

靜態初始化器與構造方法的區別: 

靜態初始化器

構造方法

對類的靜態域初始化

對新建的物件初始化

類進入記憶體後,系統呼叫執行

執行new後自動執行

屬特殊語句(僅執行一次)

屬特殊方法

方法的修飾符:

抽象方法:用abstract修飾,只有宣告部分,方法體為空,具體在子類中完成。

類方法:靜態方法,用static修飾,

1.       呼叫時,使用類名作為字首,而不是類的某個例項物件名

2.       不能被單獨物件擁有,屬於整個類共享。

3.       不能處理成員變數。

最終方法:用final修飾,不能被子類重新定義的方法。

本地方法:用native修飾的方法,表示用其他語言書寫的特殊方法,包括C,C++,FORTRAN,組合語言等。

四.類成員的訪問控制符

即類的方法和成員變數的訪問控制符,一個類作為整體物件不可見,並不代表他的所有域和方法也對程式其他部分不可見,需要有他們的訪問修飾符判斷。

許可權如下: 

訪問修飾符

同一個類

同包

不同包,子類

不同包,非子類

private

 

 

 

protected

 

public

預設