内部的类型:
内部类有多种类型,包括成员内部类、局部内部类、匿名内部类和静态嵌套类。下面是对这些内部类的简要介绍:
1. 成员内部类(Member Inner Class):
javaCopy codepublic class OuterClass {
private int outerField;
public class InnerClass {
public void display() {
System.out.println("InnerClass display: " + outerField);
}
}
}
成员内部类是定义在类内部的类。它可以访问外部类的所有成员,包括私有成员。通常通过创建外部类的实例来实例化成员内部类:
javaCopy codeOuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.display();
2. 局部内部类(Local Inner Class):
javaCopy codepublic class OuterClass {
public void outerMethod() {
class LocalInnerClass {
public void display() {
System.out.println("LocalInnerClass display");
}
}
LocalInnerClass localInnerObject = new LocalInnerClass();
localInnerObject.display();
}
}
局部内部类是定义在方法或作用域内的类。它只在声明它的方法内可见。通常在方法内部实例化局部内部类。
3. 匿名内部类(Anonymous Inner Class):
javaCopy codeinterface Greeting {
void greet();
}
public class OuterClass {
public void displayGreeting(Greeting greeting) {
greeting.greet();
}
}
匿名内部类是没有名字的局部内部类,通常用于实现接口或继承类。它在实例化的同时定义类的实现:
javaCopy codeOuterClass outerObject = new OuterClass();
outerObject.displayGreeting(new Greeting() {
public void greet() {
System.out.println("Hello from Anonymous Inner Class");
}
});
4. 静态嵌套类(Static Nested Class):
javaCopy codepublic class OuterClass {
private static int staticOuterField;
public static class StaticNestedClass {
public void display() {
System.out.println("StaticNestedClass display: " + staticOuterField);
}
}
}
静态嵌套类是声明为静态的内部类。与成员内部类不同,静态嵌套类不依赖于外部类的实例,可以直接通过外部类访问:
javaCopy codeOuterClass.StaticNestedClass staticNestedObject = new OuterClass.StaticNestedClass();
staticNestedObject.display();
内部类提供了一种封装和组织代码的方式,同时也允许访问外部类的成员。选择使用哪种内部类取决于设计的需要。成员内部类通常用于与外部类有密切关系的场景,而局部内部类和匿名内部类通常用于更临时的需求。静态嵌套类则更像是外部类的静态成员,与外部类的实例无关。