10分鐘搞懂Java內部類
依定義的方式不同,內部類別分為靜態內部類別、成員內部類別、局部內部類別、匿名內部類別四種。
1.靜態內部類別
定義在類別內部的靜態類,就是靜態內部類別。
public class Out { private static int a; private int b; public static class Inner { public void print() { System.out.println(a); } } }
1)靜態內部類別可以存取外部類別所有的靜態變數和方法,即使是private的也一樣。
(推薦影片:java影片教學#)
2)靜態內部類別和一般類別一致,可以定義靜態變數、方法、建構方法等。
3)其他類別使用靜態內部類別需要使用「外部類別.靜態內部類別」方式。如下圖所示:Out.Inner inner = new Out.Inner(); inner.print();
4)Java集合類別HashMap內部就有一個靜態內部類別Entry。 Entry是HashMap存放元素的抽象,HashMap內部維護Entry陣列用來存放元素,但是Entry對使用者是透明的。像這種和外部類別關係密切的,且不依賴外部類別實例的,都可以使用靜態內部類別。
2.成員內部類別
定義在類別內部的非靜態類,就是成員內部類別。成員內部類別不能定義靜態方法和變數(final修飾的除外)。這是因為成員內部類別是非靜態的,類別初始化的時候先初始化靜態成員,如果允許成員內部類別定義靜態變數,那麼成員內部類別的靜態變數初始化順序是有歧義的。
public class Out { private static int a; private int b; public class Inner { public void print() { System.out.println(a); System.out.println(b); } } }
3.局部內部類別(定義在方法中的類別)
定義在方法中的類,就是局部類別。如果一個類別只在某個方法中使用,則可以考慮使用局部類別。
public class Out { private static int a; private int b; public void test(final int c) { final int d = 1; class Inner { public void print() { System.out.println(c); } } } }
4.匿名內部類別(要繼承一個父類別或實作一個介面、直接使用new來產生一個物件的參考)
匿名內部類,我們必須要繼承一個父類或實作一個接口,當然也只能只繼承一個父類或實作一個接口。同時它也是沒有class關鍵字,這是因為匿名內部類別是直接使用new來產生一個物件的參考。
1)匿名內部類別只能能使用一次,在建立匿名內部類別時,它會立即建立一個該類別的實例,該類別的定義會立即消失,所以匿名內部類別時不能夠被重複使用的。
2)匿名內部類別不能定義建構函數,不能存在任何的靜態成員變數和靜態方法。
3)匿名內部類別中的方法不能是抽象的,它必須要實作介面或繼承父類別的所有抽象方法。
4)匿名內部類別存取的外部類別成員變數或成員方法必須以static修飾,內部類別可以存取外部類別私有變數和方法。
public abstract class Bird { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract int fly(); } public class Test { public void test(Bird bird){ System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米"); } public static void main(String[] args) { Test test = new Test(); test.test(new Bird() { public int fly() { return 10000; } public String getName() { return "大雁"; } }); } }
本文來自php中文網,java教學欄目,歡迎學習!
以上是10分鐘搞懂Java內部類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置
