JAVA笔记【20131214】

一、内部类

使用内部类的原因:

1、内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。

2、内部类可以对同一个包中的其他类隐藏起来。

3、当要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。


使用内部类访问对象状态:

内部类可以用public、private、protected、default任意一个修饰。也只有内部类才能使用private修饰。

内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域,包括私有域。

import java.util.* ;
import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;
public class Test31
{
	public static void main(String[] args)
	{
		TalkingClock talkc = new TalkingClock(10000,true);
		talkc.start();
		JOptionPane.showMessageDialog(null,"Quit Programe?");
		System.exit(0);
	}
}

class TalkingClock
{
	public TalkingClock(int interval,boolean flag)
	{
		this.interval = interval;
		this.flag = flag;
	}
	public void start()
	{
		ActionListener actl = new TimerPrint();
		Timer t = new Timer(interval,actl);
		t.start();
	}
	
	private class TimerPrint implements ActionListener 
	{
		public void actionPerformed(ActionEvent e)
		{
			Date now = new Date();
			System.out.println("now the time is "+now);
			if(flag)  //此处flaa访问的是类TalkingClock的实例域。
				Toolkit.getDefaultToolkit().beep();
		}
	}
	
	private int interval;
	private boolean flag;
}

局部内部类:

局部类不能使用public或者private访问修饰符进行声明。它的作用域就是在声明该局部类的块中

public void start()
{
	class TimerPrint implements ActionListener 
	{
		public void actionPerformed(ActionEvent e)
		{
			Date now = new Date();
			System.out.println("now the time is "+now);
			if(flag)
				Toolkit.getDefaultToolkit().beep();
		}
	}
	
	ActionListener actl = new TimerPrint();
	Timer t = new Timer(interval,actl);
	t.start();
}

匿名内部类:

所谓匿名内部类,也即只创建一次一个类的对象,连名字都不需要了。

匿名类不能有构造器,取而代之是将参数传递到父类构造器。当内部类实现接口时,不能有任何构造参数。

public void start()
{
	ActionListener actl = new ActionListener()
	{
		public void actionPerformed(ActionEvent e)
		{
			Date now = new Date();
			System.out.println("now the time is "+now);
			if(flag)
				Toolkit.getDefaultToolkit().beep();
		}
	};
	Timer t = new Timer(interval,actl);
	t.start();
}

静态内部类:

当一个内部类不需要引用外围类对象时,可以将内部类声明为static。接口中的内部类,自动是static和public的。

import java.util.* ;
import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;
public class Test31
{
	public static void main(String[] args)
	{
		TalkingClock talkc = new TalkingClock(10000,true);
		talkc.start();
		JOptionPane.showMessageDialog(null,"Quit Programe?");
		System.exit(0);
	}
}

class TalkingClock
{
	public TalkingClock(int interval,boolean flag)
	{
		this.interval = interval;
		this.flag = flag;
	}
	public static void start()
	{
		ActionListener actl = new TimerPrint();
		Timer t = new Timer(5000,actl);
		t.start();
	}

	private static class TimerPrint implements ActionListener 
	{
		public void actionPerformed(ActionEvent e)
		{
			Date now = new Date();
			System.out.println("now the time is "+now);
			Toolkit.getDefaultToolkit().beep();
		}
	}
	private int interval;
	private boolean flag;
}

二、代理类有点模糊,后面搞明白再说。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值