内部类学习三局部内部类覆盖
浏阳历史网 2021-10-29 04:49:01
这里我们介绍一种特殊的内部类:局部内部类(Local Inner Classes)。
要加大普通商品房的供给 在前面的例子中,我们可以发现TimerPrinter仅在start方法中创建一个新的对象时出现过一次,其它地方都没再用到过,这个情况下我们可以把TimerPrinter就定义在start方法中,如下面代码所示:
public void start(){
class TimerPrinter implements ActionListener{
//private boolean beep;
public void actionPerformed(ActionEvent e){
intln(\"Bigface,would you be my boy?\");
if(beep) tDefaultToolkit().beep();
}
}
TimerPrinter action=new TimerPrinter();
Timer t=new Timer(interval,action);
art();
}
注意,局部内部类不需要任何access modifier,否则编译出错,它的作用域一般都被限制在它所在的block中。此时,编译会产生一个名字叫Court$1TimerPrinter的class文件。局部内部类有如下两个优点:
1. 它对外面的所有类来说都是隐藏的,即时是它所属的外部类,仅有它所在的方法知道它;
2. 它不仅可以访问它所属外部类中的数据,还可以访问局部变量,不过局部变量必须生命为final类型,看下面的例子:
package st;
import tionListener;
import tionEvent;
import olkit;
import ptionPane;
import mer;
public class InnerClassTest {
public InnerClassTest() {
super();
}
public static void main(String[] args) {
Court court=new Court();
art(5000,true);
owMessageDialog(null,\"停止么,CMTobby?\");
}
}
class Court{
public void start(int interval,final boolean beep){
class TimerPrinter implements ActionListener{
public void actionPerformed(ActionEvent e){
intln(\"Cindyelf,are you crazy?\");
if(beep) tDefaultToolkit().beep();
}
}
TimerPrinter action=new TimerPrinter();//编译器会自动更改
Timer t=new Timer(interval,action);
art();
}
}
注意,局部内部类所要访问的局部变量必须声明为final类型,如上例中红色粗体部分。那么局部内部类是如何访问这个局部变量的呢?我们再对Court$1TimerPrinter反射一下,会得到如下的输出:
class urt$1TimerPrinter
{
urt$1TimerPrinter(urt, boolean);
public void actionPerformed(tionEvent);
final urt this$0;
private final boolean val$beep;
}
编译器又给我们增加了一个域val$beep,同时构造方法增加了一个boolean类型的参数,因此我们猜想如下的实现过程:
TimerPrinter action=new TimerPrinter(this,beep);//编译器自动增加
然后构造方法中会有:val$beep=beep;这样就成功的把局部变量的值复制过来了。局部变量必须为final就是为了保证成功的复制值,因为final类型的变量一经赋值就不能再发生变化了。
北京白癜风医院哪家好重庆治疗早泄医院
用什么方法可以治疗腹泻
- 存储巨头们,拼成什么?
- 于和伟的妹妹,靳东的妹妹,张嘉译的妹妹,网友:差距一目了然
- FASHION 有料 | 6.23 时髦快讯
- 贵阳市联社高管现人事变动
- 国泰君安:钒电池电解液升级能量密度显著增加 要求关注攀钢钒钛(000629.SZ)等
- 女人们“唇型”一般分这5种,3种好看,2种丑,不妨自测一下自己
- 领导的这3句话,只不过是在夸奖你,其实是暗示你快走人了
- 有种“性感”叫王子文,看她的50度吊带裙就知道,啥叫遁遁牌身材
- 如果不是真的爱你,男人不会这样烦扰你
- 2022招生预测分数线出炉?
- 装修,别抱“侥幸心理”,避开这6个点,要新颖更得安全
- 北京昌平:7月5日新增一名确诊病例,系隔离注意到人员