在Java中,类(Class)是面向对象编程的基本构建块,它用于封装对象的状态和行为。
而内部类(Inner Class)是一种特殊的类,它可以在另一个类(外部类)的内部进行定义。
内部类与外部类之间存在一种特殊的关系,这种关系允许内部类访问外部类的成员和方法,同时,外部类也可以访问内部类的成员和方法。
内部类主要分为以下几种类型:
1. 成员内部类(Member Inner Class):成员内部类是最常见的内部类类型,它像外部类的一个普通成员一样,可以访问外部类的所有成员和方法(包括private和静态成员)。成员内部类不能包含任何static声明。
class Outer {
int x = 10;
class Inner {
void show() {
System.out.println(x);
}
}
}
public class Test {
public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.show();
}
}
2. 静态内部类(Static Inner Class):静态内部类被声明为static,它只能访问外部类的静态成员和方法。静态内部类可以包含静态成员,并且不需要依赖外部类的实例就可以被实例化。
class Outer {
static class Inner {
static void show() {
System.out.println("Hello from static nested class");
}
}
}
public class Test {
public static void main(String[] args) {
Outer.Inner.show();
}
}
3. 局部内部类(Local Inner Class):局部内部类是在外部类的一个方法内部被定义的,它仅在该方法的作用域内可见。局部内部类通常用于实现接口或继承类,以及处理与当前方法相关的特定任务。
class Outer {
void doSomething() {
class Inner {
void show() {
System.out.println("Hello from local inner class");
}
}
Inner obj = new Inner();
obj.show();
}
}
public class Test {
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
4. 匿名内部类(Anonymous Inner Class):匿名内部类是没有名称的局部内部类,它通常用于扩展一个类或实现一个接口。匿名内部类通常用于创建事件监听器或初始化匿名子类。
interface MyInterface {
void show();
}
class Outer {
void doSomething() {
MyInterface obj = new MyInterface() {
void show() {
System.out.println("Hello from anonymous inner class");
}
};
obj.show();
}
}
public class Test {
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}