📜  Java内部的类(1)

📅  最后修改于: 2023-12-03 15:16:34.746000             🧑  作者: Mango

Java内部的类

在Java中,内部类是定义在另一个类内部的类。它们提供了一种组织和封装代码的方式,可以更好地实现面向对象的特性。有四种类型的Java内部类:成员内部类、静态内部类、局部内部类和匿名内部类。

成员内部类

成员内部类是定义在其他类的内部的普通类。它可以访问外部类的成员变量和方法,并且可以使用this关键字直接引用外部类的实例。成员内部类可以有访问修饰符,可以被外部类的其他类访问。以下是一个成员内部类的示例:

public class OuterClass {
    private int outerData;
    
    public class InnerClass {
        public void printOuterData() {
            System.out.println("Outer data: " + outerData);
        }
    }
}

在外部类中创建内部类的实例的示例代码:

OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
静态内部类

静态内部类是被声明为静态的内部类,它与外部类的实例无关。静态内部类可以访问外部类的静态成员,但不能访问外部类的实例变量和方法。以下是一个静态内部类的示例:

public class OuterClass {
    private static int outerData;
    
    public static class InnerClass {
        public void printOuterData() {
            System.out.println("Outer data: " + outerData);
        }
    }
}

在外部类之外创建静态内部类的实例的示例代码:

OuterClass.InnerClass inner = new OuterClass.InnerClass();
局部内部类

局部内部类是定义在方法、构造函数或代码块内部的类。它的作用域限定在包含它的代码块内部。局部内部类可以访问外部类的成员,也可以访问包含它的代码块的局部变量,但局部变量必须被声明为final或是effectively final。以下是一个局部内部类的示例:

public class OuterClass {
    public void outerMethod() {
        final int outerData = 10;
        
        class InnerClass {
            public void printOuterData() {
                System.out.println("Outer data: " + outerData);
            }
        }
        
        InnerClass inner = new InnerClass();
        inner.printOuterData();
    }
}
匿名内部类

匿名内部类是没有名字的内部类,它通常用于创建一个实现接口或抽象类的对象,并且只使用一次。它不能有构造函数,但可以有实例初始化块。以下是一个匿名内部类的示例:

public class OuterClass {
    public void outerMethod() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello from anonymous inner class!");
            }
        };
        
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

以上是Java内部类的简要介绍,它们提供了一种更灵活的代码组织方式,可以增强代码的可读性和复用性。在适当的时候使用内部类可以使代码更加模块化和更容易维护。