Java內部類是指在一個類的內部定義另一個類,內部類可以被看做是外部類的一部分,能夠訪問外部類的成員變量和方法。內部類分為成員內部類、靜態內部類、局部內部類、匿名內部類。
成員內部類:定義在類的內部,不是在方法內。成員內部類可以訪問外部類的成員變量和方法,使用成員內部類的方式為,首先要實例化外部類,在使用外部類實例來實例化內部類。
class Outer { int x = 10; class Inner { int y = 5; } } Outer myOuter = new Outer(); Outer.Inner myInner = myOuter.new Inner(); System.out.println(myInner.y + myOuter.x);
靜態內部類:定義在類的內部,被聲明為靜態的。靜態內部類可以訪問外部類的靜態成員,但是不能訪問外部類的普通成員。使用靜態內部類的方式為,直接通過類名來實例化內部類。
class Outer { static int x = 10; static class Inner { int y = 5; } } Outer.Inner myInner = new Outer.Inner(); System.out.println(myInner.y + Outer.x);
局部內部類:定義在方法中,只能在方法內部實例化。局部內部類可以訪問外部類的成員變量和方法。
class Outer { int x = 10; void myMethod() { class Inner { int y = 5; } Inner myInner = new Inner(); System.out.println(myInner.y + x); } } Outer myOuter = new Outer(); myOuter.myMethod();
匿名內部類:沒有類名的內部類,通常用于實現某個接口或抽象類的內部類。匿名內部類只能實例化一次,實例化時即定義實現的接口或抽象類,也可以在實例化時直接定義類的屬性或方法。
interface MyInterface { void sayHello(); } MyInterface myInterface = new MyInterface() { @Override public void sayHello() { System.out.println("Hello World"); } }; myInterface.sayHello();