標籤:
1、interface介面
(1)[修飾符] interface 介面名 extends 父介面1,父介面2.... •沒有構造方法,不能執行個體化; •介面只能繼承介面,不能繼承類 •介面裡沒有普通方法,方法全是抽象的; •介面裡的方法預設修飾符是
public abstract; •介面裡的欄位全是全域常量,預設修飾符是
public static final;(2)介面裡的成員包括(主要是前兩個): •全域常量 •公用的抽象方法 •內部類(包括內部類,內部介面,內部枚舉類);使用介面格式 :
public class SubImpl extends Super implements IA,IB •介面的實現必須在 extends 之後;•實現介面的方法必須是 public 類型•介面不能建立執行個體,但是可以聲明參考型別的變數。 •此時,參考型別的變數必須指向到其實作類別對象。 •IStudent s = new String();// •IStudent s = new StudentImpl();//
2、介面和抽象類別異同點(1)相同點: •都位於繼承的頂端,用於被其他實現或繼承; •都不能執行個體化; •都包含抽象方法,其子類都必須覆寫這些抽象方法;(2)區別: •抽象類別為部分方法提供實現,避免子類重複實現這些方法,提供代碼重用性;介面只能包含抽象方法; •一個類只能繼承一個直接父類(可能是抽象類別),卻可以實現多個介面;(介面彌補了Java的單繼承)(3)
二者的選用: •優先選用介面,盡量少用抽象類別; •需要定義子類的行為,又要為子類提供共性功能時才選用抽象類別;
3、內部類(1)類中有類 •內部類:嵌套類 •外部類:宿主類(2)把內部類隱藏在外部類之內,不許同包的其他類訪問該類;(3)內部類可以訪問外部類的私人資料,外部類不能訪問內部類的實現細節,比如欄位;(4)觀察編譯後的位元組碼檔案(5)非靜態內部類;靜態內部類,局部內部類;(6)匿名內部類適合於僅使用一次使用的類;
A、非靜態內部類 Ø若外部類欄位,內部類欄位,內部類方法變數同名,則其訪問方式分別是: •訪問外部類的欄位:外部類類名.this.欄位 •訪問內部類欄位:this.欄位 •訪問內部類方法的局部變數:欄位
非靜態內部類例子:
列印結果: 把局部變數添加到尾巴 把內部類屬性添加到尾巴 把外部類屬性添加到尾巴
在外部類以外訪問非靜態內部類(1)內部類不能是private修飾,否則不能訪問(2)外部類以外的地方定義內部類變數 •OuterClass.InnerClass varName ;(3)非靜態內部類對象是存放在外部類的對象裡的,因此在建立非靜態內部類對象之前,必須先建立其外部類的對象 •OuterInstance.new InnerClass([參數列表]);
public class InnerDemo { public static void main(String[] args) { //Outer.Inner in = new Outer().new Inner(); Outer.Inner in; Outer out = new Outer(); in = out.new Inner(); //in.inShow(); //Outer out = new Outer(); //out.outShow(); }}class Outer { class Inner { public void inShow() { System.out.println("inShow"); } } public void outShow(){ //System.out.println("outShow"); Inner in = new Inner(); in.inShow(); }}
在外部類以外訪問非靜態內部類例子
B、靜態內部類
C、局部內部類
D、匿名內部類
java初學4