在一个类中定义的类叫做内部类。内部类分为四种:成员内部类,静态内部类,局部内部类,匿名内部类
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