局部内部类和匿名内部类

局部内部类

定义在方法体内部的类,它只在方法内部可见。局部内部类不能使用访问修饰符 publicprivateprotectedstatic 修饰。以下是一个简单的局部内部类的例子:

public class OuterClass {
    private int outerField = 10;

    public void outerMethod() {
        final int localVar = 5; // 局部变量(被 final 修饰,因为局部内部类访问的局部变量必须是 final 或等效 final 的)

        // 局部内部类
        class LocalInnerClass {
            private int innerField;

            public LocalInnerClass(int innerField) {
                this.innerField = innerField;
            }

            public void displayFields() {
                // 在局部内部类中可以访问外部类的成员和局部变量
                System.out.println("Outer field from inner class: " + outerField);
                System.out.println("Local variable from inner class: " + localVar);
                // 访问内部类的成员
                System.out.println("Inner field: " + innerField);
            }
        }

        // 创建局部内部类的对象
        LocalInnerClass innerObj = new LocalInnerClass(20);
        // 调用局部内部类的方法显示字段
        innerObj.displayFields();
    }

    public static void main(String[] args) {
        // 创建外部类对象
        OuterClass outerObj = new OuterClass();
        // 调用外部类的方法
        outerObj.outerMethod();
    }
}

outerMethod 方法内部,我们定义了一个局部变量 localVar,局部内部类 LocalInnerClass 可以访问这个局部变量,但该变量必须是 final 或等效于 final 的(JDK 8 之后,局部变量隐式具有 final 特性)。相当于局部内部类中使用的变量会变成常量。

匿名内部类

匿名内部类是一种在创建对象和类的实例的同时定义类的一种方式,通常用于创建只需要一次使用的类的实例。匿名内部类没有显式的类名称,其定义和创建对象的过程合并在一起。适用只定义一个子类对象。必须继承一个父类或实现一个接口,定义类,实现类,和创建对象语法合并,只能创建一个该类对象。可以减少代码量

以下是一个使用匿名内部类的例子,假设有一个接口 Greeting

interface Greeting {
    void greet();
}


public class AnonymousInnerClassExample {
    public static void main(String[] args) {
        // 使用匿名内部类创建实现了 Greeting 接口的对象,抽象类也可以
        Greeting greeting = new Greeting() {
            @Override
            public void greet() {
                System.out.println("Hello from anonymous inner class!");
            }
        };

        // 调用 greet 方法
        greeting.greet();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值