一、局部内部类使用场景
局部内部类指的是,定义在方法内的类。这种类的应用场景一般是需要使用某个接口或者抽象类的实现,但是这个实现在其他地方用不到,所以定义为局部内部类。以下是一个示例:
public class OuterClass{
int a = 10;
public void test(){
class InnerClass{
public void doSomething(){
System.out.println("我是局部内部类,我的值为:" + a);
}
}
InnerClass inner = new InnerClass();
inner.doSomething();
}
}
这里我们定义了一个名为OuterClass的外部类,这个类中包含了一个名为test()的方法,这个方法中定义了一个局部内部类InnerClass,并在方法内使用了这个类。在doSomething()方法中我们可以访问外部类的变量a。
二、匿名内部类使用场景
匿名内部类使用场景一般是需要使用某个接口或者抽象类的实现,但是这个实现不需要起名字,只需要重写接口或者抽象类的方法即可。以下是一个示例:
interface InnerInterface{
public void doSomething();
}
public class OuterClass{
public void test(){
InnerInterface inner = new InnerInterface(){
public void doSomething(){
System.out.println("我是匿名内部类,我在干些事情...");
}
};
inner.doSomething();
}
}
这里我们定义了一个名为InnerInterface的接口,这个接口中定义了一个方法doSomething()。在OuterClass类中使用了匿名内部类来实现这个接口,并在test()方法中使用这个实现。
三、成员内部类使用场景
成员内部类是指定义在外部类中的类,可以直接用外部类的实例 new 出来。通常用于外部类和内部类之间需要较多信息传递的情况。以下是一个示例:
public class OuterClass{
int a = 10;
class InnerClass{
public void doSomething(){
System.out.println("我是成员内部类,我的值为:" + a);
}
}
public void test(){
InnerClass inner = new InnerClass();
inner.doSomething();
}
}
这里我们定义了一个名为OuterClass的外部类,在这个类中我们定义了一个成员内部类InnerClass,它可以访问外部类的变量a。在test()方法中我们使用了这个内部类。
四、静态内部类使用场景
静态内部类是指用 static 修饰的内部类,可以不依赖外部类实例直接创建内部类。一般用于内部类不需要依赖外部类的实例信息的情况。以下是一个示例:
public class OuterClass{
int a = 10;
static class InnerClass{
public void doSomething(){
System.out.println("我是静态内部类");
}
}
public void test(){
InnerClass inner = new InnerClass();
inner.doSomething();
}
}
这里我们定义了一个名为OuterClass的外部类,在这个类中我们定义了一个静态内部类InnerClass,它可以不依赖于外部类实例直接使用。在test()方法中我们使用了这个内部类。
五、总结
Java内部类的使用场景多种多样,可以根据实际需求进行选择。局部内部类适合在某个方法内部使用,而匿名内部类适合需要动态创建某个类的实现,并只需要使用一次的情况,成员内部类适合外部类和内部类之间需要较多信息传递的情况,而静态内部类适合不依赖于外部类信息的情况。