<em>Java</em>程序老师 发布时间: 05-2014:37 今日分享开始啦,请大家多多指教~ 嵌套类分类 静态内部类(静态嵌套类/静态成员类/静态类)内部类(非静态嵌套类)内部成员类本地内部类匿名内部类嵌套接口静态内部类 重要的
2021-05-20 16:00:46
今日分享開始啦,請大家多多指教~
巢狀類分類
靜態內部類(靜態巢狀類/靜態成員類/靜態類)內部類(非靜態巢狀類)內部成員類本地內部類匿名內部類巢狀介面靜態內部類
重要的結論:如果一個類被聲明為static(即static修飾class),只有一種情況,該類是靜態內部類。
1. 靜態內部類中能聲明哪些類,變數和方法?
沒有限制,可以聲明各種類型的類,變數,方法和靜態程式碼塊,細分為:
類:
列舉類靜態內部類內部類介面變數:
靜態變數例項變數方法:
靜態方法例項方法靜態程式碼塊2. 靜態內部類能訪問外圍類的哪些變數和方法?
靜態內部類可以訪問外圍類的任何成員,包括外圍類中聲明為private的成員,分為:
外圍類的靜態變數和方法(含私有):直接訪問外圍類的例項變數和方法(含私有):通過外圍類的例項物件進行訪問靜態內部類類似類的靜態變數,不需要依賴外圍類的例項物件而存在,可以看作是頂層類,可以直接通過外圍類來訪問。3. 繼承方面
在繼承方面,靜態內部類與外圍類沒什麼分別,在訪問許可權允許的情況下:任何類都可以繼承靜態內部類,靜態內部類也可以繼承任何類(類沒有聲明為final)或實現任何介面。
內部類
1. 細分類
內部成員類本地內部類(本地類/局部類)匿名內部類(匿名類)2. 內部類中能聲明哪些類,變數和方法?
內部類可以聲明例項變數,例項方法,final類型的靜態變數。內部類不可以聲明靜態成員:包括靜態變數,靜態方法,靜態內部類,巢狀介面,靜態初始化塊。細分為:
類:
只能聲明內部類不能聲明列舉類,靜態內部類,介面變數:
只能聲明例項變數,final類型靜態變數不能聲明靜態變數方法:
只能聲明例項方法不能聲明靜態方法不能聲明靜態程式碼塊3. 內部類能訪問外圍類的哪些變數和方法?
沒有限制,外圍類的所有變數和方法(含私有)都可以直接訪問。
4. 內部類是怎樣繫結外圍物件?
總結: 創建內部類物件(呼叫內部類的構造器)時,編譯器會隱式地在內部類中聲明一個final的外圍類類型的成員變數,然後將外圍類的物件,通過內部類的構造器傳遞給該final成員變數,用來將內部類物件繫結到外圍類物件。
創建內部類物件,如下:
創建內部類物件時,系統會自動將外圍類的物件(outer)作為參數傳入內部類的構造器中,可認為是下面的方式:
Outer.Inner inner = outer.new Inner(outer);
5. 繼承方面
在訪問許可權允許的情況下:內部類可以繼承任何類,也可以由任何類繼承。
問:那內部類與靜態內部類在繼承方面有什麼區別呢?
答:內部類的物件總是要依賴於外部物件,因此一個類A繼承了一個內部類,則類A也必須要與內部類的外圍類物件相繫結,否則產生編譯錯誤。
1.反例:產生編譯錯誤
2.錯誤的原因:
想要創建A類物件,即A a = new A(); 會呼叫A類構造器,A類繼承內部類(Outer.Inner),則會呼叫內部類的構造器。
這時沒有有效的外圍類物件,則無法實現內部類物件與外圍類物件的繫結,產生編譯錯誤。
3.修正
方法一:在A類構造器中傳遞一個外圍類的引用,通過外圍類物件來呼叫內部類的構造器,
就相當於將外圍類的物件傳遞給了內部類的構造器,實現了內部類物件與外圍類物件的繫結。
方法二:外部類繼承外部類,內部類繼承內部類
創建A類的內部類InnerA物件:
創建內部類A.InnerA物件時,需要繫結外圍物件,a引用就是外圍類的物件,
內部類A.InnerA繼承了另外一個內部類Outer.Inner,在A.InnerA呼叫父類構造器時,也需要傳遞父類的外圍類(Outer)物件,
A類繼承了Outer類,因為子類的物件可以當作父類的物件來使用,因此a引用也是另一個內部類Outer.Inner的外圍物件。
6. 本地內部類
本地內部類:就是在方法,構造器,初始化塊中聲明的類。
本地內部類不是類的成員,從結構上類似一個局部變數,因此不能使用訪問修飾符(public,protected,private),也不能使用static修飾。
問:本地內部類聲明在例項環境(例項方法,構造器,例項初始化塊)和靜態環境中有什麼區別呢?
答:例項環境:本地內部類需要與外圍類繫結,即會在類中隱式生成一個final的引用。
靜態環境:本地內部類不需要與外圍類繫結。
巢狀介面
巢狀介面:就是在類或者介面中聲明的介面。
不管聲明在類中,還是介面中,巢狀介面永遠都是靜態的。當類實現了某個介面時,不需要實現巢狀介面的方法。今日份分享已結束,請大家多多包涵和指點!
相關文章
<em>Java</em>程序老师 发布时间: 05-2014:37 今日分享开始啦,请大家多多指教~ 嵌套类分类 静态内部类(静态嵌套类/静态成员类/静态类)内部类(非静态嵌套类)内部成员类本地内部类匿名内部类嵌套接口静态内部类 重要的
2021-05-20 16:00:46
这是5月份最新出的<em>Java</em>高级面试题,题目覆盖面比较广,面试前还是需要好好去准备。除了这些技术上的问题之外,都是一些会问的常规性的问题了,比如为啥在前一家公司干的挺好的还是决定出来跳槽,喜欢安稳还是挑战,期待
2021-05-20 16:00:43
优越者20W PD快充插头除了可以给手机之类的小设备充电,还可以给<em>ipad</em> Pro平板电脑等大设备进行充电。连接之后可以给设备进行接近满功率地进行充电,峰值最高20W,持续充电一直保持在19.4W以及更高,用时约2.5小时即
2021-05-20 16:00:33
昨天,我们与传闻中的 AirPods 3 再一次失之交臂,果然不出所料,这星期是 iMac 和 <em>iPad</em> Pro 的一周,不应该有新的硬件来抢夺关注。 但总不能让看客们空手而归,于是,苹果通过新闻稿的形式,宣布了“我们所熟悉的
2021-05-20 16:00:27
五、 特斯拉底层操作系统<em>LINUX</em> 不可靠 1、 特斯拉车机系统的底层技术才用的是无主的<em>LINUX</em>系统。 2、 <em>LINUX</em>系统的好处就是免费,没有人来找知识产权的麻烦。 3、 但是这个系统很不完善、很
2021-05-20 16:00:05
ThundeRobot 雷神 911 Plus 二代 17.3英寸 游戏本 银色(酷睿i7-10750H、RTX 2060 6G、8GB、512GB <em>SSD</em>、1080P、IPS、144Hz) 这时采用了全新“启世”设计语言的雷神 ZERO 就显得诚意十足了,在正式发布前,雷神
2021-05-20 15:32:08