內部類
--把乙個類放在另乙個類的內部定義,稱為內部類。
內部類的作用:
--內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同乙個包中的其他類直接訪問。
--內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員。 但外部類不能訪問內部類的內部屬性。
--由於內部類提供了更好的封裝特性,並且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所在外部類提供服務的情況下優先使用。
內部類的分類:
--成員內部類(可以使用private、proteted、public任意進行修飾。 類檔案:外部類$內部類.class)
--非靜態內部類(外部類裡使用非靜態內部類和平時使用其他類沒什麼不同)
1、非靜態內部類必須寄存在乙個外部類物件裡。因此,如果有乙個非靜態內部類物件那麼一定存在對應的外部類物件。 非靜態內部類物件單獨屬於外部類的某個物件。
2、非靜態內部類可以使用外部類的成員,但是外部類不能直接訪問非靜態內部類成員。
3、非靜態內部類不能有靜態方法、靜態屬性、靜態初始化塊。
4、靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態**塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變數、建立例項。
5、成員變數訪問要點:
--內部類裡方法的區域性變數:變數名
--內部類屬性:this.變數名
--外部類屬性:外部類名.this.變數名
6、內部類的訪問:
--外部類中定義內部類: new innerclass()
--外部類以外的地方使用非靜態內部類:outer.inner varname = outerobject.new inner()
--靜態內部類
定義方式:
static class classname {
//類體
使用要點:
--當乙個靜態內部類物件存在,並不一定存在對應的外部類物件。 因此,靜態內部類的例項方法不能直接訪問外部類的例項方法。
--靜態內部類看做外部類的乙個靜態成員。 因此,外部類的方法中可以通過:靜態內部類.名字 訪問靜態內部類的靜態成員。通過 new 靜態內部類()訪問靜態內部類的例項。
--在外部類的外面建立靜態內部類
a.b ainner = new a.b();
--匿名內部類(常用)
--適合那種只需要使用一次的類。比如:鍵盤監聽操作等等。
定義匿名內部類的含義:
--臨時定義某一指定型別的子類
--定義後即刻建立剛剛定義的這個子類的物件
作用:建立某個型別子類物件的快捷方式。
語法:new 父類或介面(){
//進行方法的重寫;
--區域性內部類
--定義在方法內部。作用域只限於本方法。用的非常少。
匿名物件特點:
--建立匿名物件直接使用,沒有變數名
--匿名物件在沒有指定其引用變數時,只能使用一次
--匿名物件可以作為方法接受的引數、方法的返回值使用
成員內部類Inner Classes
成員內部類寄生在外部類中,因此可以訪問外部類的所有成員和方法而不受修飾符限制。因為內部類是通過例項引用來和外部類建立關係的,成員內部類的成員和方法不能用static修飾。內部類可以用private修飾,而外部類是不能使用private修飾的。如果內部類僅僅在類內部使用時,使用private修飾後,就...
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...
內部類(成員內部類 靜態內部類 方法內部類)
一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...