内部类、局部内部类、匿名内部类

   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
内部类、局部内部类、匿名内部类
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

/**
* <内部类>:定义在 另一个类 中的 类。
* 使用原因:
1.内部类方法,可以访问 <外部类> 定义所在的作用域 中的数据,包括私有数据
2.内部类可以对 <同一个包中其他类> 隐藏
3.当想要定义一个 <回调函数> 且 不想写很多代码时,使用<匿名类> 简洁
*
*/
public class TalkingClock {

private int interval;
private boolean beep;

public void start(){
...
}

//内部类
public class TimePrinter implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
Date now = new Date();
...
//OuterClass.this.attr ---> 在<内部类>中 使用 <外部类>引用
if(TalkClock.this.beep) Toolkit.getDefaultToolkit().beep();
}
}
}

/**
* <局部内部类> ----- 将<内部类>定义在<外部类>的某个 方法中
*
*/
public void start(){

//1.局部类 不能 用public/private声明,其作用于 被限定在 声明这个局部类的<块>中
//2.局部类【优势】:对<块>之外的完全隐藏,即使<外部类>其他代码 也 不能访问
class TimePrinter implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
Date now = new Date();
...
}
}

ActionListener listener = new TimePrinter();
}


/**
* <匿名内部类>(匿名类) ------ 没有类名;所以,不能有构造器;
* <匿名内部类> 是对 <局部内部类>的深入一步; 如果只创建这个类 一个对象,就不必命名了
*
*/
public void start(int interval, final boolean beep){

ActionListen listener = new ActionListent(){
@Override
public void actionPerformed(ActionEvent event){
Date now = new Date();
....
}
}
}
我在IBM工作,可以为大家内部推荐IBM各种职位 IBM全球职位尽在以下链接(请在浏览器中打开,QQ/微信 会阻止): http://ibmreferrals.com/ 很乐意为感兴趣的小伙伴分享:我的面试经验^_^ 如需咨询,请邮件发送以下邮箱,有问必回 1026096425@qq.com
原文地址:https://www.cnblogs.com/jackydalong/p/2408511.html