将一个类定义到另一个类的内部,此为内部类
public class A {
class B {
private void name() {
System.out.println("inner method");
}
}
public static void main(String[] args) {
A a = new A();
A.B b = a.new B();
}
}
内部类在代码编译的时候,会创建成多个类(根据内部类的数量定n+1),上面的代码会编译成两个文件
使用反编译工具查看后
编译后的A文件的代码基本和以上代码类似,所有不贴出来了
编译后B文件的代码
class A$B
{
private void name()
{
System.out.println("inner method");
}
}
这里可以看出,内部类被编译后会单独生成一个编译文件,名称为【外部类$内部类】
.this和.new
.this用于由内部对象创建外部类对象使用
public class A {
public void test() {
System.out.println("out method");
}
class B {
public A createOutClass() {
// 内部类使用.this创建外部类对象
A a = A.this;
return a;
}
}
public B createB() {
return new B();
}
public static void main(String[] args) {
A a = new A();
a.createB().createOutClass().test();
}
}
内部类实例化需要先实例化外部类,然后再用外部类对象.new 如 a.new B()类创建内部类对象;
//类代码如上,只是main方法进行了变换
//使用.new 创建内部类对象
public static void main(String[] args) {
A a = new A();
B b = a.new B();
}
内部类的定义还可以存在于方法和任意作用域内,比如if判断{}的作用域内