Java中的內部類是什麼?
已發表: 2022-04-29Java 中內部類的概念是 Java 編程的基礎。 在 Java 中,嵌套類和內部類是兩個非常相似但又略有不同的類設計思想,並且經常相輔相成。
嵌套類在另一個類中定義,有兩種類型——靜態嵌套類和非靜態嵌套類。 另一方面,內部類是一種非靜態嵌套類,並且進一步分為三種類型——成員內部類、匿名內部類和本地內部類。
那麼,這三種類型的內部類是什麼意思,它們的用途是什麼? 繼續閱讀以了解有關 Java 內部類的詳細指南。
Java中內部類的含義
非靜態嵌套類或內部類在另一個類中定義,並且可以訪問外部類(封閉類)的成員。 相反,靜態嵌套類也是定義在另一個類中的類,但與非靜態嵌套類不同的是,它不能訪問其外部類的成員變量。 在非靜態嵌套類的情況下,我們不需要創建外部類的實例。 但是在內部類的情況下,我們必須先實例化外部類才能實例化內部類。
資源
Java內部類的類型
在 Java 中,內部類有以下三種類型:

- 成員內部類
- 匿名內部類
- 本地內部類
現在,讓我們通過示例了解每種類型的內部類。
1. 成員內部類
Java中的成員內部類是在類內部但在方法外部創建的非靜態嵌套類。 也稱為常規內部類,可以使用私有、公共、默認和受保護等訪問修飾符聲明成員內部類。
成員內部類的語法如下:
類外{
//代碼
類內{
//代碼
}
}
Java示例中的成員內部類:
下面給出了一個程序來演示如何創建一個內部類並訪問它。 我們將內部類設為私有並使用方法 display_Inner() 來訪問該類。
類 DemoOuter {
整數;
//內部類
私人類 DemoInner {
公共無效打印(){
System.out.println(“這是內部類”);
}
}
// 從內部方法訪問內部類
無效顯示_內部(){
DemoInner 內部 = 新的 DemoInner();
內部.print();
}
}
公共類 MyClass {
公共靜態無效主要(字符串參數[]){
// 實例化外部類
DemoOuter 外部 = 新的 DemoOuter();
// 訪問 display_Inner() 方法
外部.display_Inner();
}
}
輸出:這是內部類
在上面的例子中,OuterDemo 是外部類,InnerDemo 是內部類,我們在方法 display_Inner() 內部實例化內部類,該方法是從 main 方法調用的。
探索我們流行的軟件工程課程
SL。 不 | 軟件開發計劃 | |
1 | LJMU & IIITB 計算機科學碩士 | 加州理工學院 CTME 網絡安全證書課程 |
2 | 全棧開發訓練營 | 區塊鏈中的 PG 程序 |
3 | 軟件開發行政研究生課程 - DevOps 專業化 | 查看所有軟件工程課程 |
2.匿名內部類
Java中的匿名內部類是一個沒有任何類名的內部類,並且只創建了一個對象。 Java 中的匿名內部類是同時聲明和實例化的。 當我們想要覆蓋類或接口的方法時,它們是最有價值的。

Java中匿名內部類的語法如下:
AnonymousInner an_inner = new AnonymousInner() {
公共無效我的方法(){
//代碼
}
};
Java 中的匿名內部類可以通過兩種方式創建:
- 使用類
- 使用界面
Java示例中的匿名內部類(使用類):
抽像類膳食{
抽象無效吃();
}
類 TestAnonymousInner{
公共靜態無效主要(字符串參數[]){
餐 m=新餐(){
void eat(){System.out.println(“祝你胃口大開!”);}
};
肉();
}
}
輸出:胃口大開!
Java示例中的匿名內部類(使用接口):
界面遊戲{
無效播放();
}
類 TestAnnonymousInner1{
公共靜態無效主要(字符串參數[]){
遊戲 g=新遊戲(){
public void play(){System.out.println(“戶外遊戲”);}
};
g.play();
}
}
輸出:戶外遊戲
3.本地內部類
Java 中的本地內部類是在方法內部創建的類。 與局部變量的情況一樣,局部內部類的範圍仍然限制在方法內。
本地內部類在塊內定義:方法體、if 子句或 for 循環。 本地內部類不是任何封閉類的成員,而是屬於定義它的塊。 因此,即使 Java 中的本地內部類不能有任何與之關聯的訪問修飾符,您也可以將其標記為抽像或最終的。 如果我們想調用本地內部類的方法,我們必須在方法內部實例化該類。
Java示例中的本地內部類:
下面是一個示例程序,用於演示如何實例化在外部類的方法中聲明的本地內部類的對象。
包內類;
公共類 Outer_Class
{
// Outer_Class 類的實例方法。
公共無效顯示()
{
// 方法本地內部類的聲明。
類Inner_Class
{
公共無效味精(){
System.out.println(“這是一個本地內部類!”);
}
}
// 創建方法局部內部類的實例,並使用對象引用變量 i 調用 msg() 方法。
Inner_Class i = 新的 Inner_Class();
i.msg();
}
公共靜態無效主要(字符串 [] 參數)
{
// 創建外部類 Outer_Class 的對象。
Outer_Class o = 新的 Outer_Class();
o.display();
}
}
輸出:這是一個本地內部類!
牢記 Java 內部類的基礎知識,讓我們首先了解為什麼需要它們。
Java內部類的優點
Java 中的內部類帶來了三個重要的實用程序。 這些如下:
1、由於Java內部類可以訪問外部/主類的數據成員和方法,包括private,它代表了一種特定類型的關係。
2. Java 內部類顯著減少了編碼,因為它需要更少的編寫。
3、Java中的內部類在邏輯上將類和接口組合在一個地方,從而增強了代碼的可讀性並使其更易於維護。
加起來
嵌套類的概念簡化並增加了在 Java 編程中任何地方創建類的靈活性。 在這方面,稱為內部類的非靜態嵌套類特別有用,正如我們在迄今為止的討論中已經看到的那樣。

最後,我們想說明兩個使用內部類似乎最合適的實例。 首先,當兩個類具有密切關係並且任何其他類都無法訪問時,Java 內部類是理想的。 其次,內部類在 Java GUI 編程事件處理中很常見。 因此,在涉及偵聽器及其 GUI 組件的情況下,可以安全地使用 Java 內部類。
想知道在哪裡學習 Java?
upGrad 的軟件工程與工作相關的 PG 認證 就是你要找的!
upGrad 的軟件工程與工作相關的 PG 認證專為應屆畢業生和最後幾年設計,非常適合那些想要學習編程並擔任入門級軟件角色的人。 這個為期 5 個月的在線課程將教授 Java、JavaScript、HTML5、DSA、AWS、MERN 等頂級軟件技能!
節目亮點:
- 專注於 MERN 堆棧/雲原生
- 500 多個小時的在線學習
- 350 多個小時的實踐培訓
- 50+現場會議
- 五個行業項目
- 與行業專家交流
- 與同行和行業專家的問答論壇
- 來自助教和行業導師的學習支持
立即註冊,向行業中的佼佼者學習!
內部類和子類有什麼區別?
內部類是嵌套或定義在另一個類中的類。 另一方面,子類是從另一個類派生的類。 此外,雖然內部類只能通過使用它所嵌套的外部類的引用來訪問,但子類可以直接訪問,除非子類繼承了私有變量。
我們可以在 Java 中的類中編寫類嗎?
是的,我們可以在 Java 中的另一個類中定義一個類。 這樣的類被稱為嵌套類,它允許我們在一個地方邏輯地組織類,從而創建更易於維護和可讀的代碼。 作為其封閉類的一部分,嵌套類可以聲明為公共的、私有的、包私有的或受保護的。
Java內部類可以是私有的嗎?
是的,Java 內部類可以是私有的。 但是一旦內部類被聲明為私有,就不能從類外的對象訪問它。 內部和外部類可以訪問彼此的私有實例變量和私有方法。 只要我們在外部或內部類中,修飾符 private 和 public 具有相同的效果。