6-4 内部类

package innerclass;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Timer;

public class InnerClassT {

    public static void main(String[] args) {

    }
    
    /**
     * 1.局部内部类
     * 类不能用public 或者 private修饰
     * 
     * 只有start方法才可以访问
     * 
     * 2.外部方法访问变量
     *  执行actionPerformed方法的时候,局部变量已经销毁---->
     *  编译器在内部类构造实例化的时候拷贝一份局部变量
     *  局部变量声明为final,保持局部变量和局部类的拷贝保持一致。(若想实现累计可以声明一个数组)
     *  
     *  3.匿名内部类
     * 
     */

    class TalkClass{
        
        /*    int intervel;
        boolean beep;
        
        public void start(){
            class TimePrint implements ActionListener {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    
                    if (beep) {
                        Toolkit.getDefaultToolkit().beep();
                    }
                }
                
            }
            
            ActionListener listener = new TimePrint();
            new Timer(intervel, listener);
        }*/
        
        
        public void start(int intervel,final boolean beep){
            class TimePrint implements ActionListener {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    
                    if (beep) {
                        Toolkit.getDefaultToolkit().beep();
                    }
                }
                
            }
            
            ActionListener listener = new TimePrint();
            new Timer(intervel, listener);
        }
        
        //匿名内部类
        public void startThree(int intervel,final boolean beep){
            ActionListener listener = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (beep) {
                        Toolkit.getDefaultToolkit().beep();
                    }
                }
            };
            
            new Timer(intervel, listener).start();;
        }
        
        //lambda表达式   可见 labmda表达式必匿名内部类更简洁
        public void startFour(int intervel,final boolean beep){
            new Timer(intervel, even -> {
                if (beep) {
                    Toolkit.getDefaultToolkit().beep();
                }
            } );
        }
        
        
    }
    
}
原文地址:https://www.cnblogs.com/lxh520/p/8285353.html