欢迎访问宙启技术站
智能推送

Java函数的内部类和匿名函数的使用示例

发布时间:2023-12-01 09:38:25

Java中的内部类是指在一个类的内部定义的另一个类。内部类分为成员内部类、局部内部类和匿名内部类。

1. 成员内部类

成员内部类是在外部类的内部定义的类,它与外部类之间有一个包含关系。成员内部类可以访问外部类的所有成员变量和方法,包括私有成员。

下面是一个成员内部类的使用示例:

public class OuterClass {
    private int outerVariable = 10;

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

    public class InnerClass {
        public void innerMethod() {
            System.out.println("Inner class access outer variable: " + outerVariable);
        }
    }
}

在外部类中调用成员内部类的方法:

OuterClass outer = new OuterClass();
outer.outerMethod();

2. 局部内部类

局部内部类是在方法、构造方法或初始化块内定义的类。局部内部类只能在定义它的方法内使用,并且不能有访问修饰符。局部内部类可以访问外部类的成员变量和方法,但是只能访问 final 或者实际上是 final 的局部变量。

下面是一个局部内部类的使用示例:

public class OuterClass {
    private int outerVariable = 10;

    public void outerMethod() {
        int localVariable = 5;

        class LocalInnerClass {
            public void innerMethod() {
                System.out.println("Local inner class access outer variable: " + outerVariable);
                System.out.println("Local inner class access local variable: " + localVariable);
            }
        }

        LocalInnerClass inner = new LocalInnerClass();
        inner.innerMethod();
    }
}

在外部类中调用局部内部类的方法:

OuterClass outer = new OuterClass();
outer.outerMethod();

3. 匿名内部类

匿名内部类是没有名字的内部类,它只能在定义它的地方被实例化。匿名内部类通常用来实现某个接口或继承某个抽象类。

下面是一个匿名内部类的使用示例:

public class OuterClass {
    public void outerMethod() {
        // 匿名内部类实现接口
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Anonymous inner class implements interface");
            }
        };

        // 匿名内部类继承抽象类
        abstract class AbstractInnerClass {
            public abstract void innerMethod();
        }

        AbstractInnerClass inner = new AbstractInnerClass() {
            @Override
            public void innerMethod() {
                System.out.println("Anonymous inner class extends abstract class");
            }
        };

        runnable.run();
        inner.innerMethod();
    }
}

在外部类中调用匿名内部类的方法:

OuterClass outer = new OuterClass();
outer.outerMethod();

通过内部类和匿名内部类的使用,我们可以更灵活地组织代码结构,并实现一些特定的功能。内部类可以访问外部类的私有成员,使得代码更加封装和安全。匿名内部类可以在需要的地方实现接口或继承抽象类,避免了定义新的类的麻烦。因此,在适当的时候使用内部类和匿名内部类可以提高代码的可读性和可维护性。