在一个类中定义的类叫做内部类。内部类分为四种:成员内部类,静态内部类,局部内部类,匿名内部类
1.成员内部类---在一个类中定义,类似于成员变量
/** * 成员内部类 * 内部类属于外部类的一个成员,所以内部类可以直接使用外部类的成员 * */ class Outer{ int num = 2; class Inner{ public void show(){ System.out.println(num); } } public void fun(){ Inner inner = new Inner(); inner.show(); } } public class Test { public static void main(String[] args) { Outer outer = new Outer(); outer.fun(); //直接创建内部类对象 Outer.Inner inner = new Outer().new Inner(); inner.show(); } }
运行结果:
2
2
成员变量num,成员函数fun,成员内部类Inner,都是Outer的成员,三者可以相互调用。
show()依附于Inner,Inner依附于Outer-----获取show(),要获取new Inner()---要获取new Inner(),要获取new Outer()
Outer.class与Inner.class的字节码文件的名称如下:
![]() |
Outer.class----Outer$Inner.class
2.静态内部类---static修饰
//静态内部类 class Outer{ static int num = 2; static class Inner{ public void show(){ System.out.println(num); } } public void fun(){ Inner inner = new Inner(); inner.show(); } } public class Test { public static void main(String[] args) { Outer outer = new Outer(); outer.fun(); //直接创建内部类对象 Outer.Inner inner = new Outer.Inner(); inner.show(); } }
运行结果:
2
2
成员变量num,成员函数fun,静态内部类Inner,都是Outer的成员。
show()依附于Inner,Inner依附于Outer-----获取show(),要获取new Inner()---要获取new Inner(),直接Outer点取 Outer.Inner
/** * 内部类中含有静态成员,那么内部类必须为static */ class Outer{ static int num = 2; static class Inner{//成员内部类 //内部类中含有静态成员,那么内部类必须为static public static void show(){ System.out.println(num); } } public void fun(){ Inner inner = new Inner(); inner.show(); } } public class Test { public static void main(String[] args) { Outer outer = new Outer(); outer.fun(); //直接创建内部类对象 Outer.Inner inner = new Outer.Inner(); inner.show(); } }
运行结果:
2
2
成员变量num,成员函数fun,静态内部类Inner,都是Outer的成员。
show()依附于Inner,Inner依附于Outer-----获取show(),要获取new Inner()---要获取new Inner(),直接Outer点取 Outer.Inner
/** * 内部类得到外部类对象中的成员 外部类名.this.成员 * */ class Outer{ int num = 2; class Inner{ int num =3; //内部类中含有静态成员,那么内部类必须为static public void show(){ int num =4; System.out.println(num); System.out.println(this.num); System.out.println(Outer.this); System.out.println(Outer.this.num); } } public void fun(){ Inner inner = new Inner(); inner.show(); } } public class Test { public static void main(String[] args) { Outer outer = new Outer(); outer.fun(); } }
运行结果:
4
3
langdon.Outer@40671416
2
System.out.println(Outer.this)输出的是Outer对象
原文:http://www.cnblogs.com/langdon/p/6294074.html