java内部类的特性分析

本教程操作环境: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
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容