时间:2021-05-19
今天介绍第二种内部类——局部内部类。
局部内部类是什么?顾名思义,那就是定义在局部内部的类(逃)。开玩笑的,局部内部类就是定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类。局部内部类有以下特性:
举个栗子:
public class Outer2 { public void print(){ class Inner2{ public void test(){ System.out.println("Inner.print()"); } } Inner2 inner2 = new Inner2(); inner2.test(); }}public class Test { public static void main(String[] args) { Outer2 outer2 = new Outer2(); outer2.print(); }}这里的Inner2类仅仅在Outer2的print方法中被使用,有效范围也仅在print函数之内。
通过这段玩具代码,可能无法理解为什么java中要出现这样限制这么多而且挺复杂的东西。让我们来看看之前的栗子:Java中的回调
这里把代码复制过来:
public class TimePrinter implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Date now = new Date(); System.out.println("Time is " + now + " now."); }}public class Test { public static void main(String[] args) { ActionListener listener = new TimePrinter(); Timer t = new Timer(1000,listener); t.start(); JOptionPane.showMessageDialog(null,"Quit program?");//弹出对话框,防止主线程结束导致时钟结束 System.exit(0); }}在这里,我们想要创建一个Timer时,需要往里面传入一个实现了ActionListener接口的对象,而这个对象仅仅在该方法中使用了一次,这时候内部类的优势就体现出来了,把类封装在方法中,不向外界提供任何冗余信息:
public class Test { public static void main(String[] args) { class InnerTimePrinter implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Date now = new Date(); System.out.println("Time is " + now + " now."); } } ActionListener listener = new InnerTimePrinter(); Timer t = new Timer(1000,listener); t.start(); JOptionPane.showMessageDialog(null,"Quit?"); System.exit(0); }}你也许会觉得,这样好像只是把类简单的挪到了另一个类里面,并没有什么luan用。
表面上,确实如此,但事实上,还是有很多luan用的。
在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
我们都知道,java中是不能实现多继承的,接口也正是为了对多继承的补充完善给出的方案。而我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
据个人经验,局部内部类确实用的不多,但不常用不代表没有用,知道有这样一个神奇的内部类存在,了解过它的特性之后,可以为你日后的需求提供更多的方案。
至此,本篇讲解完毕,欢迎大家继续关注!
以上就是详细分析Java内部类——局部内部类的详细内容,更多关于Java 局部内部类的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
我们一般使用的java内部类有4种形式:一般内部类、局部内部类、匿名内部类、静态内部类。以下是我作的一个测试,以说明各种内部类的特性。有关内部类的特性,代码中有
本文实例讲述了Java局部内部类原理与用法。分享给大家供大家参考,具体如下:一点睛如果把一个内部类放在方法中定义,那么这个内部类就是一个局部内部类,局部内部类仅
本文实例讲述了Java局部内部类和匿名内部类。分享给大家供大家参考,具体如下:一局部内部类1点睛内部类不仅可以在类中定义,也可以定义在方法体或作用域内。这样的内
最近在看内部类的时候,有一个疑惑:局部内部类和匿名内部类只能访问final的局部变量,看了几篇博客,明白了很多。首先,我们看一个局部内部类的例子:实例class
在“基于java内部类作用的深入分析”中你可以了解java内部类的一些东西,不过内部类中还有一些地方值得我们细心研究...下面是我总结出来的java内部类的一些