真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在Java中引入內(nèi)部類

如何在Java中引入內(nèi)部類?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、績(jī)溪ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的績(jī)溪網(wǎng)站制作公司

Java有哪些集合類

Java中的集合主要分為四類:1、List列表:有序的,可重復(fù)的;2、Queue隊(duì)列:有序,可重復(fù)的;3、Set集合:不可重復(fù);4、Map映射:無(wú)序,鍵唯一,值不唯一。

能不用內(nèi)部類就不用內(nèi)部類。

實(shí)踐

我以前覺(jué)得內(nèi)部類用來(lái)有針對(duì)性地暴露外部類的特定接口,比一下子把整個(gè)對(duì)象都給人家要好。比如說(shuō)下面代碼中的外部類Outer實(shí)現(xiàn)了三個(gè)接口方法,能跑,能飛,能思考。然后有三個(gè)方法getRunner(),getFlyer(),getThinker()有針對(duì)性地對(duì)外暴露部分功能接口。

public interface Runnable{ public void run(); } public interface Flyable{ public void fly(); } public interface Thinkable{ public void think(); } public class Outer{ public void run(){ //do something }  public void fly(){ //do something } public void think(){ //do something } public class Runner implements Runnable{ public void run(){Outer.this.run();} } public class Flyer implements Flyable{ public void fly(){Outer.this.fly();} } public class Thinker implements Thinkable{ public void think(){Outer.this.think();} } public Runner getRunner(){return new Runner();} public Flyer getFlyer(){return new Flyer();} public Thinker getThinker(){return new Thinker();} }

但實(shí)際上直接實(shí)現(xiàn)三個(gè)接口不是就很好嘛。用內(nèi)部類根本算不上優(yōu)雅,多了很多代碼。僅僅為了暴露接口根本不需要使用內(nèi)部類。

public interface Runnable{ public void run(); } public interface Flyable{ public void fly(); } public interface Thinkable{ public void think(); } public class Outer implements,Runnable,Flyable,Thinkable{ public void run(){ //do something } public void fly(){ //do something } public void think(){ //do something } }

再或者說(shuō)常見(jiàn)的控制框架。我們定義個(gè)Event接口,必須有action()方法。在外部類里定義事件處理的流程。然后定義了幾個(gè)實(shí)現(xiàn)Event接口的內(nèi)部類。

public interface Event{ public void action(); } public class Controller{ private int id; private List list=new ArrayList(); public void prepare(){ //put new events into the list } public void doEvents(){ //do every events in the list } public class A implements Event{ public void action(){ //do something } } public class B implements Event{ public void action(){ //do something } } }

但這也不是非內(nèi)部類不可。獨(dú)立定義A,B類,最后再把Event對(duì)象組合到Controller里完全可以,而且更簡(jiǎn)潔易讀。

另外,說(shuō)到內(nèi)部類,經(jīng)常會(huì)提到閉包,回調(diào)。但內(nèi)部類也不是唯一的方案。簡(jiǎn)單的繼承,組合都能實(shí)現(xiàn)同等的數(shù)據(jù)封裝效果。

但Java到底需不需要內(nèi)部類?答案還是需要的。Java引入內(nèi)部類的真正意義就在于,還是有很多情況,沒(méi)有內(nèi)部類是處理不了的,或者用內(nèi)部類處理起來(lái)更加優(yōu)雅。

還是第一個(gè)例子。如果外部類不止有一種接口實(shí)現(xiàn)方法。如果我實(shí)現(xiàn)了Runnable接口,就只能定義一個(gè)run()方法。這時(shí)候內(nèi)部類就派用場(chǎng)了。比如,企鵝既會(huì)跑,又會(huì)游泳。所以它的兩個(gè)內(nèi)部類實(shí)現(xiàn)兩種不同的run()??梢苑祷貎煞N不同的Runnable引用。

public interface Runnable{ public void run(); } public class Penguin{ public void run(){ //do something } public void swim(){ //do something } public class Running implements Runnable{ public void run(){Penguin.this.run();} } public class Swimming implements Runnable{ public void run(){Penguin.this.swim();} } public Runner getRunner(){return new Running();} public Flyer getSwimmer(){return new Swimming();} }

另一種典型場(chǎng)景就是多繼承。如果外部類已經(jīng)繼承了某個(gè)基類,比如說(shuō)企鵝繼承自鳥(niǎo)類。但Runnable這時(shí)候正好是一個(gè)abstract抽象類呢?Java不支持多繼承,內(nèi)部類可以解決這個(gè)問(wèn)題。

public class Bird{ //some code here } public abstract class Runnable{ public abstract void run(); } public class Penguin extends Bird{ public class Runner extends Runnable{ //do something } public Runner penguinCanRun(){return new Runner();} }

剛才提到了控制框架可以不用內(nèi)部類。但實(shí)際上你看看事件驅(qū)動(dòng)的Swing里到處都是內(nèi)部類。為什么呢?因?yàn)橛写罅康氖录叶鄶?shù)事件的相應(yīng)方法只被用到了一次。用內(nèi)部類是為了控制類的數(shù)量,考慮的是更好地封裝。

內(nèi)部類另外一個(gè)好的特性就是它獨(dú)立于外部類,不會(huì)像組合一樣隨著外部類的初始化而一起被初始化。而是在我們需要它的時(shí)候再創(chuàng)建它。比如說(shuō)容器里的迭代器,需要我們手動(dòng)創(chuàng)建。作為可選組件存在于外部類中,不會(huì)增加外部類的負(fù)擔(dān)。

總之,要知道什么時(shí)候真正需要內(nèi)部類,先要搞清楚什么時(shí)候可以不用內(nèi)部類。內(nèi)部類不是大力丸,不要濫用內(nèi)部類

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


網(wǎng)頁(yè)標(biāo)題:如何在Java中引入內(nèi)部類
本文鏈接:http://weahome.cn/article/ggohsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部