首页 > 编程笔记 > Java笔记 阅读:16

Java内部类的定义和使用(附带实例)

内部类是被定义在另一个类内部的类,可以分为成员内部类、局部内部类等类型。

语法结构如下:
访问修饰符 class 外部类的名称 {
    // 定义成员变量
    // 定义成员方法
    访问修饰符 class 内部类名称 {
        // 定义内部类的成员变量
        // 定义内部类的成员方法
    }
}

【实例】创建类ExtClassDemo,实现对内部类的创建,代码如下:
public class ExtClassDemo {
    // 定义成员变量
    int a = 10;

    // 定义成员方法
    public void testDemo() {
        System.out.println("外部类的方法");
    }

    // 定义内部类
    public class InnerClassDemo {
        // 定义内部类的成员变量
        int b = 20;

        public void testDemo() {
            System.out.println("内部类的方法");
        }
    }
}
在上述代码中,ExtClassDemo 类是外部类,InnerClassDemo 类是内部类,变量 a 是外部类的成员变量,变量 b 是内部类的成员变量。

在外部类中定义的成员和内部类的成员可以有相同的名称。

Java成员内部类

成员内部类定义在外部类的成员位置,就像外部类的成员变量和成员方法一样。

成员内部类可以访问外部类的所有成员,包括私有成员。创建成员内部类对象,需要先有外部类对象,可以通过“外部类对象.内部类对象”的方式来创建。

语法结构如下:
外部类 外部类对象名称 = new 外部类();
外部类.内部类 内部类对象 = 外部类对象名称.new 内部类();

【实例】创建类 ExtClassDemo,实现对内部类成员的访问,代码如下:
public class ExtClassDemo {
    // 定义成员变量
    int a = 10;
    private int c = 30;

    // 定义成员方法
    public void testDemo() {
        System.out.println("外部类的方法");
    }

    // 定义内部类
    public class InnerClassDemo {
        // 定义内部类的成员变量
        int b = 20;

        public void testDemo() {
            System.out.println(a);          // 访问外部类成员变量
            System.out.println(c);          // 访问外部类私有成员变量
            ExtClassDemo.this.testDemo();   // 调用外部类方法
            System.out.println("内部类的方法");
        }
    }
}
public class ExtClassDemoTest {
    public static void main(String[] args) {
        ExtClassDemo extClassDemo = new ExtClassDemo();
        ExtClassDemo.InnerClassDemo innerClassDemo = extClassDemo.new InnerClassDemo();

        // 调用内部类的成员变量
        System.out.println(innerClassDemo.b);

        // 调用内部类的方法
        innerClassDemo.testDemo();
    }
}
程序运行结果为:

20
10
外部类的方法
内部类的方法

在上述代码中,在 InnerClassDemo 内部类的 testDemo() 方法中可以调用外部类的成员,包括私有成员,通过“extClassDemo外部类对象.new InnerClassDemo()”创建内部类对象,“innerClassDemo.b”访问的是内部类的成员变量,“innerClassDemo.testDemo()”访问的是内部类的成员方法。

Java局部内部类

局部内部类被定义在外部类的方法内部。局部内部类只能在定义它的方法内部被访问。

局部内部类可以访问外部类的成员及方法局部变量,局部变量只有被声明为 final 才能被局部内部类访问。

【实例】创建类 ExtClassDemo02,实现对局部内部类的定义和访问,代码如下:
public class ExtClassDemo02 {
    int extB = 10;

    // 定义外部类的成员方法
    public void testDemo() {
        // 在方法中定义局部内部类
        class LocalInnerDemo {
            int a = 10;

            public void test() {
                // 访问外部类的成员
                System.out.println(extB);
                System.out.println("局部内部类的方法");
            }
        }

        // 创建局部内部类对象
        LocalInnerDemo localInnerDemo = new LocalInnerDemo();
        localInnerDemo.test();
        localInnerDemo.a = 20;
        System.out.println(localInnerDemo.a);
    }
}
在上述代码中,LocalInnerDemo 是在 testDemo 方法内部定义的局部内部类。

相关文章