介面實現
介面是類能夠做什麼的合約,但它們沒有指定類操作的實現方式!
介面能夠被繼承樹中的任何類實現
介面就像一個百分百抽象類別,無論是否對其在聲明中使用了abstract修飾符,它隱含是抽象的
介面只能有抽象方法,不允許有具體方法
介面預設是公用的和抽象的,這些修飾符的顯式聲明是可選的
介面可以有常量,它們隱含是 public,static和final
public,static和final介面常量聲明可以選擇任意組合
合法的非抽象實作類別具有以下屬性:
它為來自介面的所有方法提供具體實現
對於它實現的方法,必須符合所有的合法重寫規則
它一定不能為實現方法聲明任何新的檢查異常
它一定不能聲明比介面方法中所聲明異常更寬的檢查異常
無論介面聲明如何,它都可以在任何介面方法實現上聲明運行時異常
它必須包含與它所實現方法完全相同的方法簽名和傳回型別(但不必聲明該介面的異常)
實現介面的類自身可以是抽象的
抽象實作類別不必實現介面方法(但是第一個具體子類必須實現)
類只能擴充一個類,但是它能實現多個介面
介面能夠擴充一個或多個其他介面
介面不能擴充類,或實現一個類或介面
成員存取修飾詞
方法和執行個體變數(非局部)稱為“成員”
成員可以使用四個存取層級:public ,private,protected和預設
成員訪問有兩種形式:
類中的代碼能夠訪問另一個類中的成員
子類能夠繼承其超類中的成員
如果不能訪問類則不能訪問其成員
要在確定成員可見度之前確定類可見度
公用成員能夠被其他所有類訪問,甚至是不同包中的類
如果超類成員是公用的,那麼無論在哪個包中,子類都繼承它
不用.運算子訪問的成員必須在同一個類中
this.總是只想當前執行的對象
this.aMethod與只調用 aMothod完全相同
私人成員只能被同一個類中的代碼訪問
私人成員對子類是不可見的,因此不能繼承私人成員
預設和保護成員的區別只是在子類被調用時;
預設成員只能被處於同一個包中的其它類訪問
保護成員能夠被同一包中的其他類訪問,也能被任意包中的子類訪問
保護=包+子孫
對於包外子類,只能通過繼承訪問保護成員;包外子類不能通過使用對超類執行個體的引用來訪問保護成員;
實際上,子類從其他包繼承的保護成員對其他類來說都是私人的
局部變數
局部變數聲明不能有存取修飾詞
final是唯一可用與局部變數的存取修飾詞
局部變數沒有預設值,因此在使用之前必須將其初始化
其他修飾符--成員
final方法在子類中不能重寫
abstract方法用分號結束,而不是大括弧
有三種方法識別非抽象方法
該方法沒有標示為abstract
該方法有大括弧
該方法在兩個大括弧之前有代碼
擴充abstract的第一個非抽象類別必須實現所有abstract類的abstract方法
synchronized修飾符只能用於方法和代碼塊
synchronized方法能夠具有任何存取控制,包括final
抽象方法必須被子類實現,基於這種原因,所以:
abstract方法不能是私人的
abstract方法不能是final
native修飾符只能應用與方法
strictfp修飾符只能應用與類和方法
具有var-arg的方法
從JAVA5開始,方法可以聲明一個接受零個或多個的形數,即所謂的var-arg方法
var-arg是用文法type...name聲明的,例如doStuff(int...x){}
var-arg方法只能帶一個var-arg形參
在帶有正常形參和一個var-arg形參的方法中,var-arg形參必須出現在最後面
變數聲明
執行個體變數能夠--
具有任何存取控制
被標示為final或transient
執行個體變數不能被標示為abstract,synchronized,native和strictfp
用與執行個體變數系那個痛的名稱聲明局部變數是合法的,這被稱作“隱藏”
最終變數具有以下屬性:
一旦賦值之後,最終變數不能被重新初始化
一旦將對象賦予最終變數,則最終引用變數不能再引用不同的變數
在建構函式完成前,最終變數必須完成初始化
根本沒有final對象這種說法,標示為final的引用不是指該對象自身是不可變的
transient修飾符只能用於執行個體變數
volatile修飾符只能用與執行個體變數!