内部类:定义在一个类内部的类,也称嵌套类。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
匿名内部类
匿名内部类程序示例:
匿名内部类程序运行结果: