內部類:定義在一個類內部的類,也稱嵌套類。java
實例內部類:測試
實例內部類程序示例:this
import mypro01.Outter.Inner; class Outter{ //外部類 int age=2; String sex="mail"; public void doWorkOut(){ System.out.println("我是外部類方法"); } class Inner{ //內部類 int age=12; String name; public void doWorkIn(){ //內部類方法 doWorkOut(); //內部類可直接訪問外部類方法 //內部類訪問外部類同名和不一樣名成員的方法 System.out.println("內部類可直接訪問外部類成員"+sex); System.out.println("內部類可訪問外部類同名成員age :"+Outter.this.age); System.out.println("內部類的age和name: "+this.age+" "+this.name); } } } public class InnerClass { public static void main(String[] args) { System.out.println("**************外部類對象測試*****************"); Outter out1= new Outter(); System.out.println(out1.age); System.out.println(new Outter().age); System.out.println("**************內部類對象測試*****************"); Inner in1= new Outter().new Inner(); //內部類定義方法 Inner in2=out1.new Inner(); //內部類定義方法 System.out.println(in1.name); System.out.println(in2.name); System.out.println(in2.age); System.out.println("**************內部類方法測試*****************"); in1.doWorkIn(); } }
實例內部類程序示例運行結果:code
**************外部類對象測試***************** 2 2 **************內部類對象測試***************** null null 12 **************內部類方法測試***************** 我是外部類方法 內部類可直接訪問外部類成員mail 內部類可訪問外部類同名成員age :2 內部類的age和name: 12 null
靜態內部類對象
靜態內部類程序示例:class
import mypro01.Outter.Inner; class Outter{ //外部類 int age=2; static String sex="mail"; public void doWorkOut(){ System.out.println("我是外部類非靜態方法"); } static public void doWorkOut2(){ System.out.println("我是外部類靜態方法"); } static class Inner{ //內部類 int age=12; String name; public void doWorkIn(){ //內部類方法 //靜態內部類可直接訪問外部類靜態成員(字段和方法),但沒法直接訪問外部類非靜態成員。 System.out.println("靜態內部類可直接訪問外部類靜態成員"+sex); doWorkOut2(); //靜態內部類訪問外部類非靜態成員(字段和方法)時,需經過外部類實例去訪問。 System.out.println("靜態內部類訪問外部類非靜態成員age :"+new Outter().age); new Outter().doWorkOut(); System.out.println("內部類的age和name: "+this.age+" "+this.name); } } } public class InnerClass { public static void main(String[] args) { System.out.println("**************外部類對象測試*****************"); Outter out1= new Outter(); System.out.println(out1.age); System.out.println(new Outter().age); System.out.println("**************內部類對象測試*****************"); Inner in1= new Inner(); //靜態內部類在建立實例時,沒必要建立外部類實例 Outter.Inner in2= new Outter.Inner(); System.out.println(in1.name); System.out.println(in2.name); System.out.println(in2.age); System.out.println("**************內部類方法測試*****************"); in1.doWorkIn(); } }
靜態內部類程序運行示例:import
**************外部類對象測試***************** 2 2 **************內部類對象測試***************** null null 12 **************內部類方法測試***************** 靜態內部類可直接訪問外部類靜態成員mail 我是外部類靜態方法 靜態內部類訪問外部類非靜態成員age :2 我是外部類非靜態方法 內部類的age和name: 12 null
局部內部類(注意區別局部內部類和成員內部類)程序
局部內部類程序示例:方法
局部內部類程序示例運行結果:im
匿名內部類
匿名內部類程序示例:
匿名內部類程序運行結果: