本教程操作环境: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

















































暂无评论内容