如何在Java中引入内部类

介绍

如何在Java中引入内部类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Java有哪些集合类

Java中的集合主要分为四类:1,列清单表:有序的,可重复的;2、队列队列:有序,可重复的;3,设置集合:不可重复;4、地图映射:无序,键唯一,值不唯一。

<强>能不用内部类就不用内部类。

<强>实践

我以前觉得内部类用来有针对性地暴露外部类的特定接口,比一下子把整个对象都给人家要好。比如说下面代码中的外部类外实现了三个接口方法,能跑,能飞,能思考。然后有三个方法getRunner (), getFlyer (), getThinker()有针对性地对外暴露部分功能接口。

公共接口可运行{公共空运行();}公共接口可以飞行的{公共空飞();}公共接口可能的{公共空认为();}公共类外{公共空run(){//做某事},公共空间飞(){//做某事}公共空认为(){//做某事}公共类运动员实现Runnable{公共空运行(){Outer.this.run();}}公共类传单实现适航的公共空飞(){{Outer.this.fly();}}公共类思想家实现可能的公共空白认为(){{Outer.this.think();}}公共跑步getRunner(){返回新的跑步者();}公共传单getFlyer(){返回新飞公司();}公共思想家getThinker(){返回新的思想家();}}

但实际上直接实现三个接口不是就很好嘛。用内部类根本算不上优雅,多了很多代码。仅仅为了暴露接口根本不需要使用内部类。

公共接口可运行{公共空运行();}公共接口可以飞行的{公共空飞();}公共接口可能的{公共空认为();}公共类外实现Runnable,适航的,能想到的{公共空运行(){//做某事}公共空飞(){//做某事}公共空认为(){//做某事}}

再或者说常见的控制框架。我们定义个事件接口,必须有行动()方法。在外部类里定义事件处理的流程,然后定义了几个实现事件接口的内部类。

公共接口事件{公共空间行动();公共类控制器}{私人int id;私人List列表=new ArrayList ();公共空间准备(){//新事件放入列表}公共空doEvents(){//做列表中的每个事件}公共类实现事件{公共空间行动(){//做某事}}公共B类实现事件{公共空间行动(){//做某事}}}

但这也不是非内部类不可。独立定义,B类,最后再把事件对象组合到控制器里完全可以,而且更简洁易读。

另外,说到内部类,经常会提到闭包,回调。但内部类也不是唯一的方案。简单的继承,组合都能实现同等的数据封装效果。

但Java到底需不需要内部类?答案还是需要的. Java引入内部类的真正意义就在于,还是有很多情况,没有内部类是处理不了的,或者用内部类处理起来更加优雅。

还是第一个例子。如果外部类不止有一种接口实现方法。如果我实现了Runnable接口,就只能定义一个运行()方法。这时候内部类就派用场了。比如,企鹅既会跑,又会游泳。所以它的两个内部类实现两种不同的运行()。可以返回两种不同的Runnable引用。

公共接口可运行{公共空运行();}公开课企鹅{公共空run(){//做某事}公共空游(){//做某事}公共类运行实现Runnable{公共空运行(){Penguin.this.run();}}公共类游泳实现Runnable{公共空运行(){Penguin.this.swim();}}公共跑步getRunner(){返回新的跑步();}公共传单getSwimmer(){返回新的游泳();}}

另一种典型场景就是多继承。如果外部类已经继承了某个基类,比如说企鹅继承自鸟类。但Runnable这时候正好是一个抽象的抽象类呢? Java不支持多继承,内部类可以解决这个问题。

公共类鸟{//一些代码在这里}公共抽象类Runnable{公共抽象空运行();}公共类企鹅延伸鸟跑{公共类扩展了可运行{//做某事}公共跑步penguinCanRun(){返回新的跑步者();}}

刚才提到了控制框架可以不用内部类。但实际上你看看事件驱动的秋千里到处都是内部类。为什么呢?因为有大量的事件,而且多数事件的相应方法只被用到了一次。用内部类是为了控制类的数量,考虑的是更好地封装。

内部类另外一个好的特性就是它独立于外部类,不会像组合一样随着外部类的初始化而一起被初始化。而是在我们需要它的时候再创建它。比如说容器里的迭代器,需要我们手动创建。作为可选组件存在于外部类中,不会增加外部类的负担。

总之,要知道什么时候真正需要内部类,先要搞清楚什么时候可以不用内部类。内部类不是大力丸,不要滥用内部类

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

如何在Java中引入内部类