日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java的知识点14——内部类的概念、内部类的分类

發布時間:2025/4/16 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的知识点14——内部类的概念、内部类的分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內部類的概念

?一般情況,我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的內部定義,稱為內部類(innerclasses)。

內部類可以使用public、default、protected 、private以及static修飾

外部頂級類(我們以前接觸的類)只能使用public和default修飾

注:內部類只是一個編譯時概念,一旦我們編譯成功,就會成為完全不同的兩個類。對于一個名為Outer的外部類和其內部定義的名為Inner的內部類。編譯完成后會出現Outer.class和Outer$Inner.class兩個類的字節碼文件。所以內部類是相對獨立的一種存在,其成員變量/方法名可以和外部類的相同。

內部類介紹

package cn.dym05;class Outer{private int age=10;public void show() {System.out.println(age);}public class Inner{//內部類中可以聲明與外部類同名的屬性與方法private int age=20;public void show() {System.out.println(age);}} }public class Test01 {public static void main(String[] args) {} }

內部類的作用:

? ? ??1. 內部類提供了更好的封裝只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問

? ? ??2. 內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員但外部類不能訪問內部類的內部屬性

? ? ??3. 接口只是解決了多重繼承的部分問題,而內部類使得多重繼承的解決方案變得更加完整

內部類的使用場合:

? ? ??1. 由于內部類提供了更好的封裝特性,并且可以很方便的訪問外部類的屬性。所以,在只為外部類提供服務的情況下可以優先考慮使用內部類。

? ? ??2. ?使用內部類間接實現多繼承:每個內部類都能獨立地繼承一個類或者實現某些接口,所以無論外部類是否已經繼承了某個類或者實現了某些接口,對于內部類沒有任何影響。


內部類的分類

?在Java中內部類主要分為成員內部類(非靜態內部類、靜態內部類)、匿名內部類局部內部類

成員內部類(可以使用private、default、protected、public任意進行修飾。 類文件:外部類$內部類.class)

非靜態內部類(外部類里使用非靜態內部類和平時使用其他類沒什么不同)

? ? ? i. 非靜態內部類必須寄存在一個外部類對象里。因此,如果有一個非靜態內部類對象那么一定存在對應的外部類對象。非靜態內部類對象單獨屬于外部類的某個對象。

? ? ??ii. 非靜態內部類可以直接訪問外部類的成員,但是外部類不能直接訪問非靜態內部類成員。

? ? ??iii. 非靜態內部類不能有靜態方法、靜態屬性和靜態初始化塊

? ? ??iv. 外部類的靜態方法、靜態代碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變量、創建實例。

成員變量訪問要點:

? ? ? ??1. 內部類里方法的局部變量:變量名。

? ? ? ??2. 內部類屬性this.變量名

? ? ? ??3. 外部類屬性外部類名.this.變量名

內部類的訪問

package cn.dym05;class Outer{private int age=10;class Inner{int age=20;public void show() {int age=30;System.out.println("內部類方法里的局部變量age:"+age); //30System.out.println("內部類的成員變量age:"+this.age);//20System.out.println("外部類的成員變量age:"+Outer.this.age); //10 }} }public class Test02 {public static void main(String [] args) {//先創建外部類實例,然后使用該外部類實例創建內部類實例Outer.Inner inner=new Outer().new Inner();inner.show();Outer outer=new Outer();Outer.Inner inn=outer.new Inner();inn.show();} }

//先創建外部類實例,然后使用該外部類實例創建內部類實例?

靜態內部類

?使用要點:

? ? ? ?1. 當一個靜態內部類對象存在,并不一定存在對應的外部類對象。 因此,靜態內部類的實例方法不能直接訪問外部類的實例方法。

? ? ? ?2. 靜態內部類看做外部類的一個靜態成員。 因此,外部類的方法中可以通過:“靜態內部類.名字”的方式訪問靜態內部類的靜態成員,通過 new 靜態內部類()訪問靜態內部類的實例。

?

靜態內部類的訪問

靜態內部類相當于外部類的一個靜態成員,通過?new?外部類名.內部類名()?來創建內部類對象

package cn.dym05;class Outer{private int age=10;static class Inner{int age=20;public void show() {int age=30;System.out.println("內部類方法里的局部變量age:"+age); //30System.out.println("內部類的成員變量age:"+this.age);//20//System.out.println("外部類的成員變量age:"+Outer.this.age); //不能訪問 }} }public class Test02 {public static void main(String [] args) {//通過 new 外部類名.內部類名() 來創建內部類對象Outer.Inner inner=new Outer.Inner();inner.show();} }

匿名內部類

? ? ? 匿名內部類適合那種只需要使用一次的類。比如:鍵盤監聽操作等等

注:1. 匿名內部類沒有訪問修飾符

? ? ? ?2. 匿名內部類沒有構造方法。因為它連名字都沒有那又何來構造方法呢。

局部內部類

還有一種內部類,它是定義在方法內部的,作用域只限于本方法,稱為局部內部類

方法中的內部類

package cn.dym05;public class Test04 {public void show() {//作用域僅限于該方法class Inner{public void fun() {System.out.println("helloworld");}}new Inner().fun();}public static void main(String[] args) {new Test04().show();} }

總結

以上是生活随笔為你收集整理的Java的知识点14——内部类的概念、内部类的分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。