Java 内部类详解

在 Java 中,内部类是指在一个类的内部定义的另一个类。内部类可以访问外部类的成员变量和方法,同时也可以实现对外部类的封装。本文将详细介绍 Java 内部类的概念、分类和使用方法。

内部类的分类

Java 内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。

  1. 成员内部类:成员内部类是定义在一个类的内部的普通类,它可以访问外部类的成员变量和方法,并且可以被外部类的方法调用。成员内部类可以使用 public、protected、private 和 default 访问修饰符进行修饰。

示例代码:

public class OuterClass {
    private int outerVariable;

    public void outerMethod() {
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }

    public class InnerClass {
        private int innerVariable;

        public void innerMethod() {
            outerVariable = 10;
            System.out.println("Inner method called");
        }
    }
}
  1. 局部内部类:局部内部类是定义在一个方法或代码块内的类,它只能在该方法或代码块内部使用。局部内部类可以访问外部类的成员变量和方法,并且可以使用 final 修饰的局部变量。

示例代码:

public class OuterClass {
    private int outerVariable;

    public void outerMethod() {
        int localVariable = 10;

        class InnerClass {
            public void innerMethod() {
                outerVariable = 10;
                System.out.println("Inner method called");
                System.out.println("Local variable: " + localVariable);
            }
        }

        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }
}
  1. 匿名内部类:匿名内部类没有类名,它通常是在创建一个接口或抽象类的实例时使用。匿名内部类不能使用访问修饰符和 static 修饰符。匿名内部类可以访问外部类的成员变量和方法,并且可以使用 final 修饰的局部变量。

示例代码:

public class OuterClass {
    private int outerVariable;

    public void outerMethod() {
        Interface inner = new Interface() {
            @Override
            public void method() {
                outerVariable = 10;
                System.out.println("Anonymous inner class method called");
            }
        };

        inner.method();
    }

    public interface Interface {
        void method();
    }
}
  1. 静态内部类:静态内部类是定义在一个类的内部的静态类,它不依赖于外部类的实例。静态内部类只能访问外部类的静态成员变量和方法,不能访问非静态成员变量和方法。静态内部类可以使用 public、protected、private 和 default 访问修饰符进行修饰。

示例代码:

public class OuterClass {
    private static int outerVariable;

    public static void outerMethod() {
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }

    public static class InnerClass {
        private int innerVariable;

        public void innerMethod() {
            outerVariable = 10;
            System.out.println("Inner method called");
        }
    }
}

内部类的使用方法

通过内部类,我们可以更好地组织和管理代码。内部类可以访问外部类的私有成员,并且可以实现对外部类的封装。

下面是一个使用内部类的实例,模拟一个任务管理系统:

public class TaskManager {
    private List<Task> tasks = new ArrayList<>();

    public void addTask(String name, String description) {
        Task task = new Task(name, description);
        tasks.add(task);
    }

    public void printTasks() {
        for (Task task : tasks) {
            System.out.println("Task name: " + task.getName());
            System.out.println("Task description: " + task.getDescription());
        }
    }

    private class Task {
        private String name;
        private String description;

        public Task(String name, String description) {
            this.name = name;
            this.description = description;
        }

        public String getName() {
            return name;
        }

        public String getDescription() {
            return description;
        }
    }
}
``