類的成員之五 內部類

2021-10-03 11:45:18 字數 1762 閱讀 2215

乙個類的內部又完整的巢狀了另乙個完整的類結構。被巢狀的類稱為內部類(inner class),巢狀其他類的類稱為外部類(outer class)。是我們類的第五大成員。

按照定義在外部類區域性位置上(比如方法內)分為

成員內部類

成員內部類可直接訪問外部類的所有成員,包含私有的。

需要注意成員內部類是定義在外部類的成員位置,並且沒有static修飾。

成員內部類可以新增任意訪問修飾符(public、protected、預設、private),因為它的地位就是乙個成員。

成員內部類的作用域和外部類的其他成員一樣,為整個類體。

成員內部類訪問外部類時,是直接訪問的。

成員內部類訪問內部類時,是先建立物件,再訪問的。

如果外部類和內部類的成員重名時,內部類訪問的話,預設遵循就近原則,如果想訪問外部類的成員,則可以使用(外部類.this.成員)去訪問。

靜態內部類

靜態內部類是定義在外部類的成員位置,並且有static修飾。

靜態內部類可直接訪問外部類的所有靜態成員,包含私有的,但不能直接訪問非靜態成員。

靜態內部類可以新增任意訪問修飾符,因為它的地位就是乙個成員。

靜態內部類的作用域同其他的成員一樣,為整個類體。

靜態內部類訪問外部類,它的訪問方式是直接訪問所有靜態成員。

靜態內部類訪問靜態內部類,它的訪問方式是建立物件,再訪問。

如果外部類和靜態內部類的成員重名時,靜態內部類訪問的時候,預設遵循就近原則,如果想訪問外部類的成員,則可以使用(外部類名.成員)去訪問。

區域性內部類

區域性內部類是定義在外部類的區域性位置,比如方法中,並且有類名。

區域性內部類可直接訪問外部類的所有成員,包含私有的。

區域性內部類不能新增訪問修飾符,因為它的地位就是乙個區域性變數,區域性變數是不能使用修飾符的,但是可以使用final修飾,因為區域性變數也可以使用final。

區域性內部類的作用域僅僅在定義它的方法或**塊中,並且遵循前向引用原則。

區域性內部類訪問外部類是直接訪問的。

外部類訪問區域性內部類需要建立物件,再訪問(注意:必須在作用域內)。

外部其他類不能訪問區域性內部類(因為區域性內部類地位是乙個區域性變數)。

如果外部類和內部類的成員重名時,內部類訪問的話,預設遵循就近原則,如果訪問外部類的成員,則可以使用(外部類.this.成員)去訪問。

區域性內部類只能訪問使用final修飾的區域性變數(並且在同乙個作用域內)(需要注意的是jdk7 final必須手動新增!jdk8 final是隱式加入,不用手動新增)。

匿名內部類

匿名內部類是定義在外部類的區域性位置,比如方法中,並且沒有類名。

匿名內部類的基本語法是 new 父類或介面 (引數列表);。

匿名內部類的語法比較奇特,因為匿名內部類既是乙個類的定義,同時它本身也是乙個物件,因此從語法上看,它既有定義類的特徵,也有建立物件的特徵。

可以直接訪問外部類的所有成員,包含私有的。不能新增訪問修飾符,因為它的地位就是乙個區域性變數。

它的作用域僅僅在定義它的方法或**塊中,並且遵循前向引用原則。匿名內部類訪問外部類是直接訪問。

外部類訪問匿名內部類直接訪問(注意:必須在作用域內)。

外部其他類不能訪問匿名內部類(因為匿名內部類地位是乙個區域性變數)。

如果外部類和內部類的成員重名時,內部類訪問的話,預設遵循就近原則,如果想訪問外部類的成員,則可以使用(外部類名.this.成員)去訪問。

匿名內部類只能訪問使用final修飾的區域性變數(並且在用乙個作用域內)(注意:jdk7必須手動新增,jdk8 final是隱式加入,不用手動新增)。

(五)內部類 成員內部類

一 成員內部類 成員內部類 public class circle circle稱為外部類 draw稱為內部類 成員內部類可以無條件訪問外部類的所有成員屬性和成員方法 包括private和靜態 class draw 外部類要訪問成員內部類,必須先建立乙個成員內部類的物件,再通過這個物件的引用來訪問 ...

Java(五) 內部類和異常類

在乙個類中定義另乙個類成為內部類 包含內部類的類稱為內部類的外嵌類 內部類和外嵌類的關係 注 內部類對應的位元組碼檔案格式是 外嵌類名 內部類名 內部類可以被修飾為static內部類,但不能操作外嵌類的例項成員變數 是乙個子類,不可以用來宣告物件,但是可以建立乙個物件 特點 new name nam...

內部類之成員內部類

一 位置 成員內部類是最普通的內部類,它定義在乙個類的內部 二 內部類的結構 1.可以定義非靜態屬性和方法,不可以定義static修飾的屬性和方法,可以定義static final修飾的編譯期變數 不用載入類的位元組碼 1.1為什麼不可以定義static修飾的屬性和方法?首先內部類是外部類的乙個成員...