Java中的内部类

在Java中,内部类(Inner Class)是指在一个类的内部定义的另一个类。内部类可以直接访问外部类的所有成员变量和方法(包括private和protected),并且可以根据其定义的位置和权限分为几种不同类型:

  1. 成员内部类(Member Inner Class) 成员内部类可以是静态的(Static Nested Class)或非静态的(Non-static Nested Class)。

    非静态内部类(普通成员内部类)

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>() {
                // 匿名内部类扩展ArrayList功能
                @Override
                public boolean add(String s) {
                    System.out.println("Adding element: " + s);
                    return super.add(s);
                }
            };
    
            list.add("Item 1");
        }
    }

    静态内部类(Static Nested Class)

    public class OuterClass {
        private static String staticData = "Static Data";
    
        // 静态内部类
        static class StaticInnerClass {
            void displayStaticData() {
                // 只能访问staticData,不能直接访问非静态成员
                System.out.println(OuterClass.staticData);
            }
        }
    
        public static void useStaticInnerClass() {
            StaticInnerClass inner = new StaticInnerClass();
            inner.displayStaticData();
        }
    }
    
    // 使用
    public class Main {
        public static void main(String[] args) {
            // 不需要外部类实例就可以创建静态内部类对象
            OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
            OuterClass.useStaticInnerClass();
        }
    }
  2. 局部内部类(Local Inner Class) 局部内部类是在方法或者代码块内部定义的类,它的作用域只限于所在的方法或代码块。

    public class OuterClass {
        public void method() {
            // 局部内部类
            class LocalInnerClass {
                void displayMessage() {
                    System.out.println("This is a local inner class.");
                }
            }
    
            // 在方法内部创建并使用内部类对象
            LocalInnerClass local = new LocalInnerClass();
            local.displayMessage();
        }
    
        public static void main(String[] args) {
            OuterClass outer = new OuterClass();
            outer.method();
            // 无法在这里创建或访问LocalInnerClass对象,因为它的作用域仅限于method方法内
        }
    }
  3. 匿名内部类(Anonymous Inner Class) 匿名内部类是没有名字的内部类,通常用于简化单次使用的类的创建过程,常用于事件监听、适配器等场景。

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>() {
                // 匿名内部类扩展ArrayList功能
                @Override
                public boolean add(String s) {
                    System.out.println("Adding element: " + s);
                    return super.add(s);
                }
            };
    
            list.add("Item 1");
        }
    }

在上述示例中,内部类的设计提高了代码的封装性和灵活性,使得类与类之间的关系更加紧密,同时也增加了代码的复杂度,应当根据实际情况权衡是否使用内部类。

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

semicolon_helloword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值