本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.内部类与闭包的联系
Java的内部类让我很容易的想起来JavaScript的闭包,闭包就是定义在一个函数内部的函数——这听起来和Java的内部类定义一样一样的。本质上,闭包是将函数内部与函数外部连接起来的桥梁。内部类一样,它是将内部类与外部类连接起来的桥梁。
functionwanger(){ varage=30; functionknow(){ console.log(age); } } wanger(); //控制台输出30
2.内部类特性
(1)可以链接到外部类
可以看到SequenceSelector是一个内部类,其end()、current()和next()都用到了外围类中private的items字段。
publicclassSequence{ privateObject[]items; privateintnext=0; publicSequence(intsize){items=newObject[size];} publicvoidadd(Objectx){ if(next<items.length){ items[next++]=x; } } privateclassSequenceSelectorimplementsSelector{ privateinti=0; publicbooleanend(){ returni==items.length; } publicObjectcurrent(){ returnitems[i]; } publicvoidnext(){ if(i<items.length){i++;} } } publicSelectorselector(){ returnnewSequenceSelector(); } publicstaticvoidmain(String[]args){ Sequencesequence=newSequence(10); for(inti=0;i<10;i++){ sequence.add(Integer.toString(i)); } Selectorselector=sequence.selector(); while(!selector.end()){ System.out.print(selector.current()+""); selector.next(); } } }
2.使用.this和.new
(1)this的用法
如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。 如下所示:
publicclassDotThis{ voidname(){System.out.println("name");} publicclassInner{ publicDotThisouter(){ returnDotThis.this; } } publicInnerinner(){returnnewInner();} publicstaticvoidmain(String[]args){ DotThisdt=newDotThis(); DotThis.Innerinner=dt.inner(); inner.outer().name(); } }
需要注意DotThis.this只是产生了正确的外部类引用。并没有创建外部类对象。
(2)new的用法
可以通过该语法创建内部类对象,不过要注意的是要使用外部类的对象去创建。这里不再多谈。
原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容