內部類的概念:一個類定義在另外一個類的內部,該類叫做內部類。
內部類的分類:
1.成員內部類
2.局部內部類
3.靜態內部類.
4.匿名內部類
成員內部類:
作為外部類的一個實例成員
外部類.內部類 對象名=外部類對象.new 內部類();
一個類對應一個字節碼文件,一個內部類會產生一個字節碼文件
內部類可以使用修飾符,成員內部類只能定義實例成員。
以下是例子:
package inner;public class Outer {int a=2;void test1(){}class inner{int r=9;int b=3;void test3(){}void test2(){}}}
package inner;public class TestInner { public static void main(String[] args) { Outer out = new Outer(); out.a=3; out.test1(); Outer.inner inner = out.new inner(); inner.b=3; }}
局部內部類:定義在方法或代碼塊中的類
例子如下:
package inner;public class Out2 {int a;public void test1() {// TODO Auto-generated method stub}public void s(){class inner2{int a,b;public void test1(){}}inner2 in2 = new inner2();}}
靜態內部類:定義在類成員位置的并用static修飾的類
例子如下:
package inner;public class Out3 {static int a=7;public static class inner3{int b=9;//static int a =11;public static void function() {// TODO Auto-generated method stub System.out.PRintln("lllll");} void fun(){ }}package inner;public class Testinner3 {public static void main(String[] args) {Out3 out = new Out3();out.a=9; Out3.inner3.function(); }}
匿名內部類:
1.繼承一個父類(一般為抽象類),或實現一個接口
2.沒有名字
3.定義時立即使用,有且僅能使用一次
測試代碼如下:
package inner;public interface I { void test1();}
package inner;public abstract class A { public abstract void test2();}
package inner;public class Test1 {public static void main(String[] args) { new I(){ @Overridepublic void test1() {System.out.println("我是test1");} }.test1(); new A() {@Overridepublic void test2() {System.out.println("我是test2");}}.test2();} }
新聞熱點
疑難解答