Java的内部类主要分为哪几种?分别简单的举例实现

发布时间:2023年12月26日

在Java中,类(Class)是面向对象编程的基本构建块,它用于封装对象的状态和行为。

而内部类(Inner Class)是一种特殊的类,它可以在另一个类(外部类)的内部进行定义。

内部类与外部类之间存在一种特殊的关系,这种关系允许内部类访问外部类的成员和方法,同时,外部类也可以访问内部类的成员和方法。
内部类主要分为以下几种类型:
1. 成员内部类(Member Inner Class):成员内部类是最常见的内部类类型,它像外部类的一个普通成员一样,可以访问外部类的所有成员和方法(包括private和静态成员)。成员内部类不能包含任何static声明。

class Outer {
    int x = 10;
    
    class Inner {
        void show() {
            System.out.println(x);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Outer out = new Outer();
        Outer.Inner in = out.new Inner();
        in.show();
    }
}


2. 静态内部类(Static Inner Class):静态内部类被声明为static,它只能访问外部类的静态成员和方法。静态内部类可以包含静态成员,并且不需要依赖外部类的实例就可以被实例化。

class Outer {
    static class Inner {
        static void show() {
            System.out.println("Hello from static nested class");
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Outer.Inner.show();
    }
}


3. 局部内部类(Local Inner Class):局部内部类是在外部类的一个方法内部被定义的,它仅在该方法的作用域内可见。局部内部类通常用于实现接口或继承类,以及处理与当前方法相关的特定任务。

class Outer {
    void doSomething() {
        class Inner {
            void show() {
                System.out.println("Hello from local inner class");
            }
        }
        Inner obj = new Inner();
        obj.show();
    }
}

public class Test {
    public static void main(String[] args) {
        Outer out = new Outer();
        out.doSomething();
    }
}


4. 匿名内部类(Anonymous Inner Class):匿名内部类是没有名称的局部内部类,它通常用于扩展一个类或实现一个接口。匿名内部类通常用于创建事件监听器或初始化匿名子类。

interface MyInterface {
    void show();
}

class Outer {
    void doSomething() {
        MyInterface obj = new MyInterface() {
            void show() {
                System.out.println("Hello from anonymous inner class");
            }
        };
        obj.show();
    }
}

public class Test {
    public static void main(String[] args) {
        Outer out = new Outer();
        out.doSomething();
    }
}

文章来源:https://blog.csdn.net/KissTooTrue/article/details/135221804
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。