内部类
将一个类定义在另一个类中
内部类可以直接访问外部类的成员
可以使用private…等控制访问进行修饰
分类:
成员内部类
静态内部类
方法内部类
匿名内部类
非静态内部类
/*
* 测试非静态内部类
*/
public class TestInner {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
//创建内部类
inner.show();
}
}
class Outer{
private int age = 10;
public void testOuter() {
System.out.println("Test");
}
// 定义内部类,加不加static决定是静态内部类还是非静态
class Inner {
int age = 20;
public void show() {
int age = 30;
System.out.println("外部类的成员变量"+Outer.this.age);
System.out.println("内部成员变量:"+this.age);
System.out.println("局部变量:"+age);
}
}
}
静态内部类
可以看作是个静态成员,创建对象不依托外部类
/*
* 测试静态内部类
*/
public class TestStaticClass {
public static void main(String[] args) {
// 不在依托外部类,可以之间创建对象
Outer2.Inner2 inner2 = new Outer2.Inner2();
inner2.show();
}
}
class Outer2{
// 定义静态内部类
static class Inner2{
void show() {
System.out.println("StaticClassTest");
}
}
}
匿名内部类
适合只需要使用一次的类
/*
* 测试匿名内部类
*/
public class AnonymousClass {
public static void test(A a) {
a.aa();
}
public static void main(String[] args) {
// new A() 就是匿名内部类
AnonymousClass.test(new A() {
@Override
public void aa() {
System.out.println("AnonymousClassTest");
}
});
}
}
interface A{
void aa();
}
方法内部类
在方法内部定义一个类
生命周期仅限在此方法中
使用较少