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

Java函数的内部类:介绍Java函数中的内部类,包括成员内部类、局部内部类、匿名内部类等。

发布时间:2023-05-23 09:23:53

Java内部类是指在一个类的定义内部定义的另一个类。Java中内部类分为成员内部类、局部内部类和匿名内部类,下面将分别进行介绍。

一、成员内部类

成员内部类是定义在类的内部并且和类的成员变量和成员方法具有相同的访问权限。通过实例化外部类的对象来访问成员内部类,成员内部类可以访问外部类的所有成员(包括私有成员)。

下面是一个示例:

public class OuterClass {
    private int a = 1;
    private static int b = 2;
    public void outerMethod() {
        System.out.println("a = " + a + ", b = " + b);
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }
    public class InnerClass {
        public void innerMethod() {
            System.out.println("a = " + a + ", b = " + b);
        }
    }
}

可以看到,在外部类中定义了一个内部类InnerClass,并且在外部类的方法中实例化了这个内部类并调用了它的方法。

二、局部内部类

局部内部类是定义在方法内部的类,只能在该方法内部被访问使用。局部内部类可以访问外部类的成员变量和方法,但是必须是final类型的变量。

下面是一个示例:

public class OuterClass {
    public void outerMethod() {
        final int a = 1;
        class InnerClass {
            public void innerMethod() {
                System.out.println("a = " + a);
            }
        }
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }
}

可以看到,在外部类的方法中定义了一个局部内部类InnerClass,并且在方法内部实例化了这个内部类并调用了它的方法。

三、匿名内部类

匿名内部类是没有类名的局部内部类,用来创建只使用一次的类的对象。匿名内部类没有构造方法,也不能定义静态成员变量和方法。匿名内部类必须继承一个父类或实现一个接口。

下面是一个示例:

public class OuterClass {
    public void outerMethod() {
        Runnable r = new Runnable() {  // 定义一个匿名内部类,继承Runnable接口
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}

可以看到,在外部类的方法中定义了一个匿名内部类,并且实现了Runnable接口中的run方法,然后创建了一个线程并启动它。

总结:

Java内部类是一种非常强大的特性,可以很好地进行代码的封装和组织。成员内部类可以访问外部类的所有成员变量和方法,局部内部类和匿名内部类只能访问外部类的final类型变量。在使用内部类时需要注意内存泄漏问题,要在不需要使用内部类时及时销毁它们。