Java 内部类怎么用
早上赶地铁的时候,你有没有注意过,有些人会把手机放在贴身的口袋,再套上一个防水袋,最后塞进背包的侧袋里?如果把“Java代码”比作这趟地铁,那“内部类”就像这个防水袋——它不是独立存在的,而是“套”在另一个“类”(就像手机的主人)里面,专门服务于外部类的小功能,既不会乱跑,又能精准发挥作用。
很多人第一次接触Java内部类,总觉得它是“复杂的高端玩法”,其实它的用法和你日常用的收纳工具一模一样,今天就用3个生活化的场景,把它讲明白。

场景一:给外部类装“专属工具”——成员内部类
你平时会在自己的书包里放专属的笔记本,别人不会随便用,这就是成员内部类的作用:它依附于外部类的实例,就像笔记本依附于书包主人,只能用外部类里的东西,还能直接访问外部类的所有信息。
举个例子,你做了一个“外卖订单”的外部类,里面有“订单编号”“收货地址”这些核心信息,同时需要一个“订单小票打印机”的功能——这个打印机只服务于这个订单,给它单独做一个类的话,就成了无关的独立代码,把它放进订单类里,就是成员内部类。
代码里用的时候也简单:先创建外部类的订单实例,再用这个实例创建内部类的打印机,比如“订单实例.小票打印机 打印机 = 订单实例.new 小票打印机()”,打印的时候直接用订单的地址就行,不用额外传参数,就像你拿自己书包里的笔记本,不用跟别人解释自己的地址一样方便。
场景二:临时用的“随身便利贴”——局部内部类
你有时候会在便利贴上写临时的外卖备注,用完就扔,不会单独保存,这就是局部内部类的特点:它只在外部类的某个方法里存在,出了这个方法就没用了。
还是用外卖的例子,假设你在“修改订单备注”的方法里,需要一个“备注校验工具”——这个工具只用来检查备注是不是超过20字,修改完就不用了,没必要单独做成一个类。这时候就在修改备注的方法里,直接写这个局部内部类,不用加修饰符,也不用外部调用,就像你在修改订单的时候,随手写的便利贴,改完就丢,完全不占地方。
它的限制也很明显:只能在当前方法里用,而且要注意方法里的局部变量得是“不变的”,就像便利贴写的内容不能随便改,不然校验的时候会出错,这是Java的小规则,记住就好。
场景三:躲在角落的“临时快递盒”——匿名内部类
你收到陌生快递的时候,不会单独给它建一个“快递类”,拆完就扔,这就是匿名内部类的精髓:连名字都不用起,用一次就没了,专门用来处理临时的、只有一次的任务。
最常见的场景是按钮点击事件,比如你做一个“外卖APP”,点击“提交订单”按钮,触发“扣款+发通知”的操作。要是单独写一个“点击处理器”的类,就太啰嗦了,直接用匿名内部类,写在按钮的点击方法里就行,就像你拆完陌生快递,直接把盒子扔到垃圾桶,不用给盒子贴标签。
用的时候注意,匿名内部类得实现一个接口或者继承一个类,就像快递盒得有“能装东西”的属性,才能用来装快递,不然没法用。而且它只能用一次,下次再要处理别的按钮,得重新写,就像下次拆别的快递,得用新的盒子。
其实Java内部类的核心逻辑,就是“分工更细,代码更干净”——就像你不用把所有东西都塞在书包里,分个专属笔记本、便利贴、临时快递盒,找东西的时候不会乱,代码维护起来也方便。下次再碰到内部类,就想想这些日常的小物件,就不会觉得难了。