Java中的成員內部類

? Java中的成員內部類(也稱為非靜態內部類)是定義在另一個類(外部類)內部的類。

這種內部類與它的外部類之間有著緊密的聯系,主要體現在幾個方面:它可以訪問外部類的所有成員(包括私有成員),并且它的實例自動持有外部類實例的引用。下面詳細講解Java中的成員內部類:

1. 定義成員內部類

成員內部類定義在外部類的任何方法之外,通常作為外部類的一個成員存在。它不能包含靜態成員(除了靜態常量),因為成員內部類實例總是依賴于外部類實例。

public class Outer {private int age=18;public static String a;//成員內部類public class Inner{public String name;private int age=28;public void test(){System.out.println(age);System.out.println(a);int age=38;System.out.println(age);//38System.out.println(this.age);//28System.out.println(Outer.this.age);//18}}
}

?

2. 訪問外部類成員

1.成員內部類可以直接訪問外部類的所有成員(包括私有成員),而無需任何特殊語法。

2.可以在成員內部類的實例方法中,拿到當前外部類對象,格式:外部類名.this

3. 創建成員內部類實例

? 要創建成員內部類的實例,你需要先創建外部類的實例,然后通過外部類實例來創建內部類實例。這是因為成員內部類的實例總是與外部類的一個實例相關聯。

public class test1 {public static void main(String[] args) {Outer.Inner in=new Demo1().new Inner();in.test();}
}

?

4. 成員內部類的用途

  • 封裝:成員內部類提供了一種將邏輯緊密相關的類組織在一起的方式,從而增強了代碼的封裝性。
  • 回調:成員內部類可以作為回調接口的實現,這樣可以避免在外部類中創建大量僅用于回調的匿名內部類。
  • 訪問控制:通過內部類,可以隱藏一些實現細節,同時允許在包級別或類級別控制訪問。

5. 注意事項

  • 成員內部類不能聲明為static,因為靜態成員屬于類本身,而非類的實例。如果需要靜態內部類,應使用靜態內部類(也稱為嵌套類)。
  • 成員內部類實例的創建總是依賴于外部類實例,因此它們之間的生命周期也是緊密相關的。
  • 成員內部類可以訪問外部類的this引用,但不能直接訪問外部類的靜態成員(除非通過外部類名訪問)。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45767.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++小白Python選手2小時入門C++

學習鏈接:C入門/2小時從C到C快速入門(2018,C教程) C在C語言的基礎上增加了面向對象和通用算法語言特征。 C頭文件不必是.h結尾,C頭文件舉例:cmath、cstdio注釋:單行//、多行/**/為了防止名字沖…

MQ基礎1

對應B站視頻: MQ入門-01.MQ課程介紹_嗶哩嗶哩_bilibili 微服務一旦拆分,必然涉及到服務之間的相互調用,目前我們服務之間調用采用的都是基于OpenFeign的調用。這種調用中,調用者發起請求后需要等待服務提供者執行業務返回結果后…

【JavaScript腳本宇宙】強大的自然語言處理:六款JavaScript庫詳解

從語義到實體:深入了解JavaScript自然語言處理庫 前言 隨著人工智能和自然語言處理技術的飛速發展,JavaScript在這一領域也有了越來越多的應用。本文將介紹幾個優秀的JavaScript庫,它們專注于處理英語文本,并提供了豐富的功能和…

求立方體面積體積以及判斷(c++)

代碼&#xff1a; #include<iostream> using namespace std;class Cube { public:void setL(int l){m_L l;}int getL(){return m_L;}void setW(int w){m_W w;}int getW(){return m_W;}void setH(int h){m_H h;}int getH(){return m_H;}int calculateS(){return 2 * (…

netdata 監控軟件安裝與學習

netdata官網 netdata操作文檔 前言&#xff1a; netdata是一款監控軟件&#xff0c;可以監控多臺主機也可以監控單臺主機&#xff0c;監控單臺主機時&#xff0c;開箱即用&#xff0c;web ui很棒。 環境&#xff1a; [root192 ~]# cat /etc/system-release CentOS Linux rel…

徹底清理Conda環境:使用conda remove命令的終極指南

徹底清理Conda環境&#xff1a;使用conda remove命令的終極指南 在Conda環境中&#xff0c;隨著時間的推移&#xff0c;可能會積累大量不再需要的包和它們的依賴項。這不僅會占用寶貴的磁盤空間&#xff0c;還可能影響環境的性能。conda remove命令是Conda提供的一個強大工具&…

GD32F407VET6新建固件庫工程并下載運行

零、所需文件及環境&#xff1a; 1、固件庫的壓縮包 GD32F4xx_Firmware_Library_V3.2.0.7z 官網 2、GD32F407的keil支持包 官網 兆易創新GigaDevice-資料下載兆易創新GD32 MCU 2、 keilkilll.bat 用來刪除編譯過程文件 可以不要 &#xff08;原子、野火資料里都有&…

LeetCode熱題100(JavaScript)

哈希 兩數之和 暴力解法 /*** param {number[]} nums* param {number} target* return {number[]}*/ var twoSum function(nums, target) {for(let i 0;i<nums.length;i){let x1 nums[i]for(let j 0 ; j<nums.length;j){if(i!j){let x2 nums[j]if(x1x2target){ret…

算法金 | 來了,pandas 2.0

大俠幸會&#xff0c;在下全網同名「算法金」 0 基礎轉 AI 上岸&#xff0c;多個算法賽 Top 「日更萬日&#xff0c;讓更多人享受智能樂趣」 今日 210/10000 Pandas 是一個強大的數據分析庫&#xff0c;廣泛應用于科學研究、金融分析、商業智能等領域。它提供了高效的數據結構…

[WUSTCTF2020]level4題解 入土為安的第三天

二叉樹 Practice my Data Structure code..... Typing....Struct.....char....*left....*right............emmmmm...OK! Traversal! Traversal type 1:2f0t02T{hcsiI_SwA__r7Ee} Traversal type 2:20f0Th{2tsIS_icArE}e7__w Traversal type 3: //type3(&x[22]); No w…

samba服務、安裝-smbpasswd工具、pdbedit工具、testparm工具

在Windows構建的網絡生態里&#xff0c;各主機間的文件及打印資源共享&#xff0c;主要依賴微軟專有的SMB/CIFS網絡協議來達成。SMB&#xff08;即Server Message Block&#xff0c;服務消息塊&#xff09;與CIFS&#xff08;全稱Common Internet File System&#xff0c;通用互…

ShardingSphere的項目應用

1. 事情的起因 最近,隨著業務的發展,我們的項目面臨著日益增長的數據挑戰。系統使用的數據庫是mysql,每天的增量差不多在百萬左右,由于沒有進行分庫分表,以前設置的單表保存已經越發不能滿足需求,所以想維持表的性能,甲方考慮對這些大數據量的表進行分表操作,同時也采…

MySQL left join、right join以及inner join的區別 ?

LEFT JOIN&#xff08;左連接&#xff09;、RIGHT JOIN&#xff08;右連接&#xff09;和INNER JOIN&#xff08;內連接&#xff09;是SQL中用于連接兩個或多個表以檢索數據的重要操作。它們之間的主要區別在于如何處理那些在連接條件下沒有匹配的行。下面通過具體的例子來說明…

掃地機器人如何解決安全性與隱私保護

掃地機器人在解決安全性與隱私保護方面&#xff0c;需要從多個角度入手&#xff0c;包括產品設計、技術實現、用戶教育以及法律法規遵守等方面。以下是具體的解決方案&#xff1a; 一、安全性解決方案 1.提升避障能力&#xff1a;使用先進的傳感器技術&#xff0c;如激光雷達、…

JavaScript switch 語句

JavaScript switch 語句 JavaScript 中的 switch 語句是一種多分支選擇結構&#xff0c;用于根據變量的值執行不同的代碼塊。它提供了一種簡潔的方式來替代多個 if...else 語句&#xff0c;特別是在處理多個條件時。 基本語法 switch (expression) {case value1:// 代碼塊 1…

微信小程序實現省市區級聯選擇組件

微信小程序實現省市區級聯選擇組件 首先&#xff0c;創建一個新的組件&#xff0c;命名為 area-picker。 在 area-picker.wxml 文件中添加以下代碼&#xff1a; <view class"area-picker"><picker mode"multiSelector" bindchange"onPick…

C++基礎篇(2)

目錄 前言 1.缺省參數 2.函數重載 2.1函數重載的基本規則 ?編輯2.2注意事項 2.3 重載解析&#xff08;Overload Resolution&#xff09;--補充內容 3.引用 3.1引用的概念和定義 3.2引用的特性 3.3引用的使用 3.4const引用 4.指針和引用的關系 結束語 前言 上節小編…

PlantUML 教程:繪制時序圖

繪制時序圖是 PlantUML 的一個強大功能&#xff0c;下面是詳細的 PlantUML 時序圖教程&#xff0c;幫助你理解如何使用它來創建清晰的時序圖。 基本概念 時序圖&#xff08;Sequence Diagram&#xff09;用于展示對象之間的交互以及它們之間的消息傳遞順序。它主要由以下元素…

感應燈光畫純電路開源版本

前言 之前那版燈光畫用的從垃圾佬淘的電路板拼出來的&#xff0c;功能不全&#xff0c;顯示效果不太好而且無法固定到相框上&#xff0c;這次改版用的嘉立創smt&#xff0c;貼了5片板子&#xff08;19元&#xff09;&#xff0c;功能上的改進是加了無極觸摸調光、添加了黃白兩…

簡易圖書管理系統——MYsql+Javase+JDBC

目錄 前言 數據表的建立 操作包各個類的實現 增加類 刪除類 展示類 借閱與歸還類 前言 書接上文 JDBC編程的學習——MYsql版本-CSDN博客 本期我們通過對先前圖書管理系統進行改造,是它的數據能保存在數據庫中 完整代碼我已經保存在github中,能不能給個星呢!!!! call…