java中关于内部类的使用详解

内部类是定义在其他类内部的类。与常规的类不同,内部类可以直接访问外部类的私有成员变量和方法,甚至可以访问外部类的私有内部类。也可以将内部类看作是外部类的成员,与普通成员变量和方法类似。

Java中关于内部类的使用详解

什么是内部类?

内部类是定义在其他类内部的类。与常规的类不同,内部类可以直接访问外部类的私有成员变量和方法,甚至可以访问外部类的私有内部类。也可以将内部类看作是外部类的成员,与普通成员变量和方法类似。

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

成员内部类

成员内部类是定义在外部类中的内部类,它可以使用外部类的所有成员变量和方法,并且可以访问外部类的私有成员。成员内部类可以使用public、protected、default、private等访问修饰符进行修饰。

示例代码如下:

public class OuterClass {
    private int num = 11;

    public class InnerClass {
        public void print() {
            System.out.println("num is " + num);
        }
    }

    public void display() {
        InnerClass inner = new InnerClass();
        inner.print();
    }
}

通过以上代码可以看出,内部类InnerClass直接定义在外部类OuterClass内部,并且可以访问外部类的私有成员变量num。在外部类OuterClass中,通过实例化内部类InnerClass的对象inner,调用它的print()方法,打印num的值。

局部内部类

局部内部类是定义在方法内部的类,它只能在方法内部使用,并且不可以使用访问权限修饰符进行修饰。局部内部类一般用于辅助实现某个功能,而不是作为独立的类来使用。

示例代码如下:

public class OuterClass {
    private int num = 11;

    public void display(int x) {
        class InnerClass {
            public void print() {
                System.out.println("num is " + num);
                System.out.println("x is " + x);
            }
        }
        InnerClass inner = new InnerClass();
        inner.print();
    }
}

通过以上代码可以看出,内部类InnerClass直接定义在方法display()内部,并且可以访问外部类的私有成员变量num和方法参数x。在方法display()中,通过实例化内部类InnerClass的对象inner,调用它的print()方法,打印num和x的值。

匿名内部类

匿名内部类是没有名字的内部类,它通常用于创建一次性的对象。匿名内部类可以继承一个类或者实现一个接口,但是不能显式地定义构造函数,因为它没有名字。

示例代码如下:

public class OuterClass {
    public void display() {
        new Thread(new Runnable() {
            public void run() {
                System.out.println("Thread is running.");
            }
        }).start();
    }
}

通过以上代码可以看出,匿名内部类没有名字,是通过new关键字直接定义一个继承Runnable接口的类,并实现其中的run()方法。在方法display()中,通过新建一个Thread对象并传入一个匿名内部类,启动线程并调用匿名内部类的run()方法,打印"Thread is running."。

静态内部类

静态内部类是直接定义在外部类中的静态类,它不需要外部类的实例就可以创建和使用,并且只能访问外部类的静态成员和方法。静态内部类可以使用public、protected、default、private等访问修饰符进行修饰。

示例代码如下:

public class OuterClass {
    private static int num = 11;

    public static class InnerClass {
        public void print() {
            System.out.println("num is " + num);
        }
    }
}

通过以上代码可以看出,内部类InnerClass直接定义在外部类OuterClass内部,并且可以访问外部类的静态成员变量num。在外部类OuterClass中,可以通过直接访问InnerClass.print()方法,打印num的值。

总结

通过以上的示例代码,我们可以更好地理解Java中内部类的概念和使用方法。在实际开发中,内部类可以用于辅助实现某些复杂的功能,同时也能提高代码的封装性和安全性。

本文标题为:java中关于内部类的使用详解

基础教程推荐