Java的內(nèi)部類總結(jié)
前言
最近看了內(nèi)部類后,總結(jié)一下,首先內(nèi)部類嵌套在其他內(nèi)部的類,根據(jù)出現(xiàn)的位置和關(guān)鍵字,可以分為以下四種類:成員內(nèi)部類,靜態(tài)內(nèi)部類,方法內(nèi)部類,匿名內(nèi)部類,接下來就介紹下這四種類,記得耐心看哦
一,成員內(nèi)部類
1,成員內(nèi)部類的特點(diǎn)
(1)private不可以用在外部類的聲明,但可在內(nèi)部類聲明,成員變量可以是private
(2)內(nèi)部類,外部類可以相互訪問彼此的私有域
A:內(nèi)部類訪問外部類的私有域可以直接訪問,因?yàn)槌蓡T內(nèi)部類含有隱藏對(duì)象
B:外部類訪問內(nèi)部類的私有域通過內(nèi)部類對(duì)象訪問
(3)內(nèi)部類可解決Java中單繼承問題
(4)內(nèi)部類可以對(duì)外部隱藏
2,成員內(nèi)部類的實(shí)現(xiàn)
public class Outter { // 成員變量 private int age = 12; private String name = "zh"; private static final int A = 20; //成員內(nèi)部類 class Inner{ private String a = "hello"; private int age = 20; public void test(){ System.out.println(a); // 可以訪問外部類的私有域age System.out.println(Outter.this.age); //訪問自己的age System.out.println(this.age); System.out.println(A); } } // 外部類成員方法 public void fun() { int a = 0; // 外部類內(nèi)部創(chuàng)建內(nèi)部類對(duì)象 Inner inner = new Inner(); System.out.println(inner.a); }}class Test { public static void main(String[] args) { //外部類的外部創(chuàng)建內(nèi)部類對(duì)象 Outter.Inner inner = new Outter().new Inner(); }}public class Outter { // 成員變量 private int age = 12; private String name = "zh"; private static final int A = 20; //成員內(nèi)部類 class Inner{ private String a = "hello"; private int age = 20; public void test(){ System.out.println(a); // 可以訪問外部類的私有域age System.out.println(Outter.this.age); //訪問自己的age System.out.println(this.age); System.out.println(A); } } // 外部類成員方法 public void fun() { int a = 0; // 外部類內(nèi)部創(chuàng)建內(nèi)部類對(duì)象 Inner inner = new Inner(); System.out.println(inner.a); } } class Test { public static void main(String[] args) { //外部類的外部創(chuàng)建內(nèi)部類對(duì)象 Outter.Inner inner = new Outter().new Inner(); } }
3,內(nèi)部類和外部類的關(guān)系
A:成員內(nèi)部類的創(chuàng)建需要依賴于外部類對(duì)象
B:內(nèi)部類和外部類之間相互獨(dú)立
C:兩者的私有屬性可以相互訪問
D:語法
(1)外部類的內(nèi)部創(chuàng)建內(nèi)部類對(duì)象
Inner inner = new Inner();
(2)外部類的外部創(chuàng)建內(nèi)部類對(duì)象
Outter.Intter intter = new Outter().new Intter();
E:在內(nèi)部類的內(nèi)使用隱藏的this
二,靜態(tài)內(nèi)部類
1,靜態(tài)內(nèi)部類的特點(diǎn)
(1)定義在外部類的內(nèi)部使用static修飾,靜態(tài)內(nèi)部類無需外部類無需外部類產(chǎn)生對(duì)象就可以使用
(2)靜態(tài)內(nèi)部類的創(chuàng)建語法
StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
2,比較成員內(nèi)部類和靜態(tài)內(nèi)部類
(1)成員內(nèi)部類不能擁有靜態(tài)域,但可以訪問外部的靜態(tài)域
(2)靜態(tài)內(nèi)部類可以擁有成員域,但不能訪問外部的成員域
3,靜態(tài)內(nèi)部類的實(shí)現(xiàn)
public class StaticInnerClass { static int age; String name; //靜態(tài)內(nèi)部類--類比--靜態(tài)變量 static class Inner{ private int age; public void test(){ System.out.println(age); // System.out.println(name);不能訪問外部成員域 } } public void fun() { Inner inner = new Inner(); } } class Test1 { public static void main(String[] args) { StaticInnerClass.Inner inner = new StaticInnerClass.Inner(); } }
三,方法內(nèi)部類
1,方法內(nèi)部類的特點(diǎn)
(1)方法內(nèi)部類定義在方法內(nèi)部
(2)對(duì)外部完全隱藏,因此不能有任何訪問修飾
(3)若要方法的形參只能用,不能改(形參的隱式final聲明)
2,方法內(nèi)部類的實(shí)現(xiàn)
//方法內(nèi)部類 public class FunClass { private int age; public void fun(int age) { class Inner { void fun() { // System.out.println(age); } } age = 10; } }
四, 匿名內(nèi)部類
1,匿名內(nèi)部類的特點(diǎn)
(1)匿名內(nèi)部類定義在方法內(nèi)部,類沒有名字
(2)必須繼承一個(gè)抽象類或者實(shí)現(xiàn)一個(gè)接口
(3)沒有構(gòu)造方法
2,匿名內(nèi)部類的實(shí)現(xiàn)
//實(shí)現(xiàn)接口interface IMessage { void fun();}public class NonNameClass { public static void main(String[] args) { //匿名內(nèi)部類 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("hello A"); } }); Thread thread1 = new Thread({ System.out.println("hello "); } ); thread.start(); thread1.start(); }}//實(shí)現(xiàn)接口 interface IMessage { void fun(); } public class NonNameClass { public static void main(String[] args) { //匿名內(nèi)部類 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("hello A"); } }); Thread thread1 = new Thread({ System.out.println("hello "); } ); thread.start(); thread1.start(); } }
總結(jié)
朋友們,看到最后是不是對(duì)內(nèi)部類有了新的認(rèn)識(shí)?
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
IntelliJ IDEA配置Tomcat(完整版圖文教程)
這篇文章主要介紹了IntelliJ IDEA配置Tomcat(完整版圖文教程),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05SpringBoot如何指定某些類優(yōu)先啟動(dòng)
這篇文章主要介紹了SpringBoot如何指定某些類優(yōu)先啟動(dòng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Springboot整合多數(shù)據(jù)源代碼示例詳解
這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08SpringBoot可視化監(jiān)控的具體應(yīng)用
最近越發(fā)覺得,任何一個(gè)系統(tǒng)上線,運(yùn)維監(jiān)控都太重要了,本文介紹了SpringBoot可視化監(jiān)控的具體應(yīng)用,分享給大家,有興趣的同學(xué)可以參考一下2021-06-06sms4j?2.0?全新來襲功能的調(diào)整及maven變化詳解
這篇文章主要介紹了sms4j?2.0?全新來襲功能的調(diào)整及maven變化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Java8新特性之再見Permgen_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之再見Permgen的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-06-06