内部类-----Java
內(nèi)部類-----Java
內(nèi)部類是一類特殊的類,指的是定義在一個類的內(nèi)部的類,在Java中內(nèi)部類主要分為非靜態(tài)內(nèi)部類、靜態(tài)內(nèi)部類、局部
內(nèi)部類、匿名內(nèi)部類。
?
非靜態(tài)內(nèi)部類,作為類的成員存在,和成員變量、構(gòu)造方法、代碼塊并列。因為是類的成員,所以非靜態(tài)成員內(nèi)部類可以
使用public、protected、默認(rèn)、private修飾,而外部類只能使用public、默認(rèn)修飾。
public class OutClass {//成員變量private String name;private int num = 10;//構(gòu)造方法public OutClass(){}public OutClass(String name,int num){this.name = name;this.num = num;}//成員方法public void methodOut(){System.out.println("methodOut");}public void methodOut2(){InnerClass ic = new InnerClass();System.out.println(ic.num);//20ic.methodInner();}class InnerClass{private String type;private int num = 20;//構(gòu)造方法public InnerClass(){}public InnerClass(String type,int num){this.type = type;this.num = num;}//成員方法public void methodInner(){System.out.println(name);int num = 30;System.out.println(num);//30System.out.println(this.num);//20//內(nèi)部類如何訪問外部類的同名成員變量System.out.println(OutClass.this.num);//10methodOut();}} } public class Test {public static void main(String[] args) {OutClass oc = new OutClass();oc.methodOut();oc.methodOut2();//要創(chuàng)建非靜態(tài)成員變量內(nèi)部類對象,必須先創(chuàng)建外部類的對象//OutClass.InnerClass ic = new OutClass().new InnerClass();OutClass oc2 = new OutClass();OutClass.InnerClass ic = oc2.new InnerClass();} }運行結(jié)果如下:
總結(jié):
1、內(nèi)部類可以直接訪問外部類成員
2、外部類不能直接訪問內(nèi)部類的成員,需要先創(chuàng)建對象再通過對象名來訪問。
3、內(nèi)部類如何訪問外部類的同名成員變量:OuterClass.this.num
4、必須先創(chuàng)建外部類的對象,才能創(chuàng)建內(nèi)部類的對象。非靜態(tài)成員內(nèi)部類是屬于某個外部類對象的。
5、非靜態(tài)內(nèi)部類不能有靜態(tài)方法、靜態(tài)屬性和靜態(tài)代碼塊。
5、外部類的靜態(tài)方法、靜態(tài)代碼塊不能訪問非靜態(tài)內(nèi)部類,包括不能使用非靜態(tài)內(nèi)部類定義的變量、創(chuàng)建的實例。
?
注意:
內(nèi)部類只是編譯時的概念,一旦我們編譯成功,就會成為完全不同的兩個類。對于一個名為Out的外部類和其內(nèi)部定義的名為Inner
的內(nèi)部類。編譯完成后會出現(xiàn)Outer.class和Outer$Inner.class兩個類的字節(jié)碼文件。所以內(nèi)部類是相對獨立的一種存在,其成員變量、方法
名可以和外部類相同。
總結(jié)
以上是生活随笔為你收集整理的内部类-----Java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java biginteger 运算_J
- 下一篇: linux的vi把文件合并一行,学习Vi