【Java基础面试题022】什么是Java内部类?有什么作用?
回答重点
Java内部类是指:在一个类的内部定义的类,Java支持多种类型的内部类,包括成员内部类、局部内部类、匿名内部类和静态内部类。实际上内部类是一个编译层面的概念,像一个语法糖一样,经过编译器之后其实内部类会提升为外部顶级类,和外部类没有任何区别,所以在JVM中是没有内部类的概念的
内部类的主要作用:
- 封装性:将逻辑相关的类封装的在一起
- 访问外部类成员:内部类可以方便的访问外部类的成员变量和方法,尤其在需要操作外部类兑现的场景下非常有用
- 简化代码:对于只在一个地方使用的小类,内部类可以减少冗余代码,简化结构
- 事件处理:匿名内部类广泛用于实现回调函数或事件监听,简化了代码结构,特别是对于实现接口或抽象类的场景
扩展知识
四种内部类
包括:
- 成员内部类:非静态类,作为外部类的一个成员。它可以直接访问外部类的所有成员,包括私有成员
- 局部内部类:定义在方法或代码块中的类,仅在该方法和代码块中可见,通常用于临时的对象构建
- 匿名内部类:没有类名的内部类,所以只能临时用一次,通常用于创建短期使用的实例对象,尤其是在接口回调或事件处理时被广泛使用
- 静态内部类:static修饰的静态类,属于类,无法访问外部类的非静态成员,只能访问外部类的静态成员
成员内部类
public class OuterClass {
private String outerField = "Outer Field";
class InnerClass {
void display() {
System.out.println("Outer Field: " + outerField);
}
}
public void createInner() {
InnerClass inner = new InnerClass();
inner.display();
}
}
静态内部类
public class OuterClass {
private static String staticOuterField = "Static Outer Field";
static class StaticInnerClass {
void display() {
System.out.println("Static Outer Field: " + staticOuterField);
}
}
public static void createStaticInner() {
StaticInnerClass staticInner = new StaticInnerClass();
staticInner.display();
}
}
局部内部类
public class OuterClass {
void outerMethod() {
final String localVar = "Local Variable";
class LocalInnerClass {
void display() {
System.out.println("Local Variable: " + localVar);
}
}
LocalInnerClass localInner = new LocalInnerClass();
localInner.display();
}
}
匿名内部类
public class OuterClass {
interface Greeting {
void greet();
}
public void sayHello() {
Greeting greeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello, World!");
}
};
greeting.greet();
}
}