Java內部類

文章目錄

    • 什么是 Java 中的內部類?有哪些類型的內部類?
      • 匿名內部類
      • 局部內部類(定義在方法中的類)
      • 局部內部類
      • 靜態內部類

Java 類中不僅可以定義變量和方法,還可以定義類,這樣定義在類內部的類就被稱為內部類。根
據定義的方式不同,內部類分為靜態內部類,成員內部類,局部內部類,匿名內部類四種。

什么是 Java 中的內部類?有哪些類型的內部類?

內部類是定義在另一個類中的類。Java 中有四種類型的內部類:成員內部類、靜態內部類、局部內部類和匿名內部類。

Java 內部類是定義在另一個類內部的類。與外部類不同,內部類可以訪問定義它們的外部類的成員變量和方法,并且可以被私有化,從而實現了封裝。
Java 內部類可以分為四種類型:成員內部類: 成員內部類是定義在類內部,并且不是靜態的內部類。成員內部類可以訪問外部類中的所有成員變量和方法,并且可以被私有化,從而實現了更好的封裝性。
undefined 靜態內部類: 靜態內部類是定義在類內部,并且被聲明為靜態的內部類。靜態內部類只能訪問外部類中的靜態成員變量和方法,不能訪問非靜態成員變量和方法,因為在外部類實例化時,靜態內部類已經存在于內存中,而非靜態成員變量和方法是需要實例化后才能被訪問的。
undefined 局部內部類: 局部內部類是定義在方法或代碼塊中的內部類。局部內部類只能在定義它的方法或代碼塊中使用,具有更小的作用域。
undefined 匿名內部類: 匿名內部類是沒有類名的內部類,用于定義一次性的、功能簡單的類。通常用于實現接口或繼承父類,并且只會使用一次。
內部類的使用場景包括:
undefined 為某個類提供一些幫助類,這些類只在外部類中使用到。
undefined 實現某個接口或繼承某個類,在最終的類中需要使用到。由于匿名內部類只能使用一次,所以通常用于比較簡單的實現。
undefined 隱藏某個類或接口,只能在外部類中使用。
undefined 將所有的輔助類都放在同一個包中,使得包對外"暴露"的類都是一個類,而不是多個類的組合。
總的來說,Java 內部類提供了更好的封裝和組織代碼的方式,可以使代碼更加清晰、簡潔,并且更加方便實現一些復雜的邏輯。

匿名內部類

要繼承一個父類或者實現一個接口、直接使用new 來生成一個對象的引用
匿名內部類我們必須要繼承一個父類或者實現一個接口,當然也僅能只繼承一個父類或者實現一個接口。同時它也是沒有 class 關鍵字,這是因為匿名內部類是直接使用 new 來生成一個對象的引用

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 "大雁";}});}
}

匿名內部類是唯一一種沒有構造器的類。正因為其沒有構造器,所以匿名內部類的使用范圍非常有限,大部分匿名內部類用于接口回調。匿名內部類在編譯的時候由系統自動起名為Outter$1.class。一般來說,匿名內部類用于繼承其他類或是實現接口,并不需要增加額外的方法,只是對繼承方法的實現或是重寫。

public class Demo {private Runnable runnable = new Runnable() {@overridepublic void run() {}}
}

局部內部類(定義在方法中的類)

定義在方法中的類,就是局部類。如果一個類只在某個方法中使用,則可以考慮使用局部類。
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?;
}
}
}
}

局部內部類

定義在類內部的非靜態類,就是成員內部類。成員內部類不能定義靜態方法和變量(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);
}
}
}}

靜態內部類

定義在類內部的靜態類,就是靜態內部類

public class Out {private static int a;private int b;public static class Inner {public void print() {System.out.println(a);}}
}

undefined 靜態內部類可以訪問外部類所有的靜態變量和方法,即使是 private 的也一樣。
undefined 靜態內部類和一般類一致,可以定義靜態變量、方法,構造方法等。
undefined 其它類使用靜態內部類需要使用“外部類.靜態內部類”方式,如下所示:

Out.Inner inner =
new Out.Inner();inner.print();

undefined Java集合類HashMap內部就有一個靜態內部類Entry。Entry是HashMap存放元素的抽象,
HashMap 內部維護 Entry 數組用了存放元素,但是 Entry 對使用者是透明的。像這種和外部
類關系密切的,且不依賴外部類實例的,都可以使用靜態內部類。

參考:
https://blog.csdn.net/liuxiao723846/article/details/108006609

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

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

相關文章

Java期末復習題之封裝

點擊返回標題->23年Java期末復習-CSDN博客 第1題. 定義一個類Person,定義name和age私有屬性,定義有參的構造方法對name和age進行初始化。在測試類中創建該類的2個對象,姓名、年齡分別為lili、19和lucy、20,在屏幕打印出2個對象的姓名和年齡…

2024年江蘇省職業院校技能大賽信息安全管理與評估 理論題(樣卷)

2024年江蘇省職業院校技能大賽信息安全管理與評估 理論題(樣卷) 理論技能與職業素養(100分) 2024年江蘇省職業院校技能大賽(高職學生組) 模塊三“信息安全管理與評估”理論技能 【注意事項】 Geek極安云…

Qt對excel操作

Qt庫中自帶對excel操作的模塊QAxObject,QAxObject是Qt提供給程序員從代碼中訪問Office的對象類,其本質上是一個面向微軟操作系統的COM接口。 QAxObject將所有Office的工作簿、表格、文檔等都作為其子對象,程序員通過調用querySubObject()這個…

vue-quill-editor上傳圖片base64轉化為img標簽

vue-quill-editor傳圖片的話默認把圖片轉成了base64&#xff0c;會導致我們的參數特別大&#xff0c;不好渲染 基于vue-quill-editor重寫一個quill-editor組件 <template><div><quilleditorv-model"content"ref"myTextEditor":options&qu…

在線圖片轉Base64圖片的方法

html版(不包含跨域解決,輸入在線圖片地址即可轉換) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

Cisco 思科路由交換網絡設備 安全基線 安全加固操作

目錄 賬號管理、認證授權 本機認證和授權ELK-Cisco-01-01-01 設置特權口令 ELK-Cisco-01-02-01 ELK-Cisco-01-02-02 ???????登錄要求 ELK-Cisco-01-03-01 ???????ELK-Cisco-01-03-02 ELK-Cisco-01-03-03 日志配置 ELK-Cisco-02-01-01 通信協議 ELK-Cisco-…

軟考高級信息系統項目管理師經驗分享

考了三次終于考過了。 第一次&#xff0c;沒準備&#xff0c;打醬油。 第二次&#xff0c;不舍得花錢&#xff0c;自己復習&#xff0c;結果教材改版了都不知道。 第三次&#xff0c;改機考了。 總結一下這三次的經驗&#xff1a; 一、不是學霸型的一定要報班 報班的優點&…

實時動作識別學習筆記

目錄 yowo v2 yowof 判斷是在干什么,不能獲取細節信息 yowo v2 https://github.com/yjh0410/YOWOv2/blob/master/README_CN.md ModelClipmAPFPSweightYOWOv2-Nano1612.640ckptYOWOv2-Tiny

【prometheus】入門+實習需求實戰

prometheus官方教程 說明&#xff1a; 感冒了&#xff0c;寫點總結不浪費時間&#xff0c;聲明不會扯出來任何的私有代碼&#xff0c;畢竟要保密&#xff0c;只會講prometheus的官方有的&#xff0c;以及那些開源的代碼方法&#xff0c;例如prometheus客戶端代方法&#xff0…

QML中Dialog獲取close與open狀態

1.新建MyDialog.qml import QtQuick 2.15import QtQuick.Dialogs 1.2Dialog {id: rootvisible: falsetitle: qsTr("彈出對話框")width: 250height: 200} 2.main.qml中調用MyDialog import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15…

JS原生實現瀏覽器滾動條滾動側邊欄高亮響應

目錄 演示 ?編輯 需求 代碼 css html script 代碼解釋 1、獲取所有link-content 2、定義一個rectContent數組&#xff0c;然后循環allContents調用getClientRects()[0]獲取每個link-content元素與瀏覽器視口的關系 3、為數組追加link-content&#xff0c;用于設置側…

軟件設計師——面向對象技術(一)

&#x1f4d1;前言 本文主要是【面向對象技術】——軟件設計師—面向對象技術的文章&#xff0c;如果有什么需要改進的地方還請大佬指出?? &#x1f3ac;作者簡介&#xff1a;大家好&#xff0c;我是聽風與他&#x1f947; ??博客首頁&#xff1a;CSDN主頁聽風與他 &#…

C++學習筆記(十一)

一、類和對象 C面向對象的三大特性為&#xff1a;封裝、繼承、多態 C認為萬事萬物皆為對象&#xff0c;對象上有其屬性和行為 例如&#xff1a;人可以作為對象&#xff0c;屬性有姓名、年齡、身高......&#xff0c;行為有走、吃、睡覺 車也可以作為對象&#xff0c;屬性有輪…

官網IDM下載和安裝的詳細步驟

目錄 一、IDM是什么 二、下載安裝 三、解決下載超時的問題 四、谷歌瀏覽器打開IDM插件 谷歌瀏覽器下載官網&#x1f447; 五、測試 六、資源包獲取 一、IDM是什么 IDM&#xff08;internet download manager&#xff09;是一個互聯網下載工具插件&#xff0c;常見于用…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 29 章:ChatGPT 插件

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 29 章&#xff1a;ChatGPT 插件 這是 ChatGPT 的另一個圣杯。它將徹底改變你使用 ChatGPT 的方式。ChatGPT 插件本質上是將 ChatGPT 的功能擴展到文本輸出之外。它允許你上傳圖片、視頻、音頻和 CSV 文件&…

資深IT經理分享如何選擇商用遠控軟件三:評估產品方案匹配度

作為企業必要的IT管理和遠程辦公工具&#xff0c;遠程控制解決方案的挑選和采購是需要IT部門慎重考慮的。 對于具體如何在諸多產品中選擇合適的商用遠程控制解決方案&#xff0c;此前我們就分享了一位資深IT經理的相關經驗&#xff0c;目前已經涵蓋初期的業務需求調研&#xf…

【ESP32 IDF】ESP32移植u8g2庫,實現oled界面顯示

ESP32移植u8g2庫&#xff0c;實現oled界面顯示 1. 簡單描述2. 環境準備1. 硬件準備2. 軟件準備 3. IIC屏幕 【基于 ssd1362 256*64 】4. SPI屏幕 【基于 ssd1306 128*32】 1. 簡單描述 開發方式為 IDF5.0參考連接為 iic基于esp-idf移植使用u8g2 spi基于esp-idf移植使用u8g2 …

探索創意無限的Photoshop CC 2020Mac/Win版

作為一款功能強大的圖像處理軟件&#xff0c;Photoshop CC 2020&#xff08;簡稱PS 2020&#xff09;在全球范圍內備受設計師、攝影師和藝術家的喜愛和推崇。它不僅為用戶提供了豐富多樣的工具和功能&#xff0c;還不斷推出新的創意特效和改進的功能&#xff0c;讓用戶的創意無…

【數據結構和算法】擁有最多糖果的孩子

其他系列文章導航 Java基礎合集數據結構與算法合集 設計模式合集 多線程合集 分布式合集 ES合集 文章目錄 其他系列文章導航 文章目錄 前言 一、題目描述 二、題解 三、代碼 四、復雜度分析 前言 這是力扣的1431題&#xff0c;難度為簡單&#xff0c;解題方案有很多種&…

C# Solidworks二次開發:選擇管理器相關的API介紹

今天在講述主要內容之前&#xff0c;先說一個不太相關的問題。 我之前在其他文章中看到有一些朋友在問為什么獲取到的點位數據需要乘以1000進行單位轉換&#xff0c;其實原因是這樣的&#xff0c;在所有使用的API中如果沒有特殊說明&#xff0c;所有的長度單位都是米&#xff…