Java学习笔记009——局部内部类(需配合接口使用)

局部内部类(Local Inner Classes)在Java中是一种非常有用的特性,尽管它们的使用场景相对较少。局部内部类定义在一个方法、构造器或代码块中,而不是在类的顶层。这样的设计有几个主要的意义:

1. 代码组织:局部内部类可以将逻辑紧密相关的代码组合在一起。由于局部内部类定义在它们被使用的地方附近,因此这使得代码更加紧凑和易于理解。

2. 访问控制:局部内部类可以直接访问其包含作用域(即定义它的方法或代码块)的局部变量,即使这个局部变量是`final`的。这提供了一种方式来操作包含作用域的数据,而无需将数据暴露给外部类。

3. 避免冗余:有时,一个内部类只需要在一个方法内部使用一次,这时将其定义为一个局部内部类而不是一个嵌套类(nested class)或静态内部类(static inner class)可以避免不必要的冗余和污染类的命名空间。

4. 上下文相关:局部内部类特别适合于表示与其外部代码块紧密相关的某种上下文。例如,你可能有一个方法需要处理多种不同的算法,每种算法可能需要不同的辅助类。在这些情况下,局部内部类可以方便地为每种算法提供专用的辅助逻辑。

5. 增强封装性:局部内部类可以提供比匿名内部类(anonymous inner classes)更强的封装性,因为它们具有名称,并且可以通过构造函数接收参数。这使得它们更适合于需要更复杂逻辑的场景。

6. 灵活性:局部内部类允许在代码的不同部分定义具有相同名称的内部类,因为它们的可见性仅限于它们的定义作用域。这提供了更大的灵活性,允许你在不同的上下文中重用内部类的名称。

下面是一个使用局部内部类的简单示例:

package com.test;

/**
 * 定义一个接口Speaker
 */
interface Speaker{
    void speak();
}

/**
 * 定义外部类LocalInnerClass演示内部成员方法内定义局部内部类
 */
public class LocalInnerClass {
    Speaker getSpeaker(String str) {
        // 在成员方法中定义一个局部内部类MySpeaker,这个类实现接口Speaker
        class MySpeaker implements Speaker {
            public void speak() {
                System.out.println(str); //在局部内部类中,Java允许访问所在方法内的变量,比如访问传入的参数str
            }
        }
        return new MySpeaker();
    }

    public static void main(String[] args) {
        LocalInnerClass lic = new LocalInnerClass();
        lic.getSpeaker("局部内部类的实现与使用演示。").speak();
    }
}

分析上面代码main方法中的调用过程,可以更好的理解局部内部类的实现与使用:

(1)创建LocalInnerClass类的实例对象lic

(2)调用lic的getSpeaker方法,传入实参“局部内部类的实现与使用演示。”字符串,赋值给形参str。

(3)getSpeaker方法返回Speaker接口类型对象,该方法结束,Java会清理该方法所在的栈空间,形参str被清理。

(4)调用Speaker对象的speak方法,这个方法在局部内部类中实现,输出getSpeaker方法中的形参str的值。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值