內部類使用總結

2021-10-19 10:37:55 字數 2104 閱讀 8906

1.巢狀類和內部類

在類裡面定義另乙個類,這個類就叫巢狀類,巢狀類可以呼叫外部類的所有成員包含私有成員,但是外部類不能訪問巢狀類中的成員。

sttatic修飾的變數、方法或巢狀類在沒有建立物件的情況下可以通過類名直接訪問,當然通過物件也可以進行訪問,由於靜態成員不能訪問非靜態成員,而非靜態成員卻可以通過類名.直接訪問靜態成員。

所以靜態巢狀類就不能訪問外部類的非靜態成員了,所以很少使用靜態巢狀類。

而非靜態巢狀類就被廣泛使用,俗稱內部類。只能在外部類內建立內部類的例項物件,限制了內部類的作用域,在內部類的外部類之外的範圍建立該內部類實力會產生錯誤報nosuchclas***ception。

2.內部類分類

2.1靜態內部類

加了static的內部類,就是巢狀類,有兩個特點:

①因為加了static所以可以通過類名直接訪問,所以在建立靜態內部類物件時,不需要先建立外部類物件了。

②因為static修飾的靜態類成員不能訪問非靜態成員,所以靜態內部類物件不能訪問外部類的非靜態成員。

③因為區域性變數不能加static修飾詞,所以不能在外部類的方法或類似for迴圈體的**塊中定義靜態內部類。

2.2私有內部類

加了private修飾的內部類,就是私有內部類,相當於外部類的乙個私有成員。

特點①因為區域性變數不能加private,所以不能在方法或者其他類似for迴圈體的**塊中定義私有內部類了。

2.3區域性內部類

我們也可以在任何**塊的作用域內定義非靜態的內部類把它看做乙個區域性變數,比如在方法或者for迴圈踢內定義巢狀類,稱為區域性內部類

示例**:

class outer

}inner inner = new inner();

inner.display();

} } }

public class innerclassdemo

}

執行結果:

a=6

a=6a=6

2.4匿名內部類

最常用的一種內部類,不需要類名,用來重寫父類方法,常用於介面或者抽象類的例項化實現,new介面或者抽象類的匿名子類物件

weapon w = new weapon() ;
(變數為父類型別,new的是子類物件,但由於子類沒有類名,所以寫成父類物件格式,()為父類構造器,後面接,最後要記得加「;」)

l 大括號是weapon的匿名子類,其內可以重寫父類weapon的方法,並定義自己的屬性

l new 新建匿名子類的物件

l 小括號 super()、super(引數),呼叫父類構造器

l 變數型別必須用父型別

示例**:

//匿名內部類

public class anonymousclass

@override

public int test2(int a)

};humen.test1();

humen.test2(0);

pig pig = new pig(10)};

pig.prodemo();

pig.processdemo();

system.out.println("定義匿名內部類的()是父類構造器,賦值i="+pig.i);}}

inte***ce humen

abstract class pig

void prodemo()

abstract void processdemo();

}

執行結果:

重寫父類介面中的抽象方法

介面中變數預設都是公共的靜態常量

抽象方法有建構函式,但是介面沒有建構函式

這是個抽象類

重寫父類抽象類中的抽象方法

定義匿名內部類的()是父類構造器,賦值i=10

內部類總結

1內部類的巢狀可以理解成類的鏈關係,在構造乙個內部類 非static 的例項的時候,會將直接外層類的例項 作為引數傳進建構函式,而外層類的例項也是用其外層類的例項構造,所以是一種鏈狀關係,內部的類可以使用所有 外層的類的例項,而外層的類不能使用內層的類,應用a.this 最外層類例項 a.b.c.t...

內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...

內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...