20180410 java java面向对象-匿名内部类分析
匿名内部类的定义:就是没有名称的局部内部类,适用于只使用一次的类。
在开发中经常有这样的类,只需要定义一次,使用一次,就可以丢弃了。此时就不应该把这种类定义在文件中。再javaSE的事件中 或在安卓的事件处理中 这种类用的较多。
eg:不同的按钮 点击之后会有不同的响应操作,事件响应的代码 就不需要放在文件中定义。这样 就首选 匿名内部类。
匿名内部类:用的时候就定义它,用完就不要了。
匿名内部类特点:
特点1:匿名内部类本身没有构造器,但是会调用父类的构造器。
特点2:匿名内部类尽管没有构造器,但是可以在匿名内部类中提供一段实例初始化代码块,java虚拟机(JVM)在调用父类构造器后,会执行该代码块。
语法格式:
new 父类构造器(实参列表) 或 接口()
{
//匿名内部类的类体部分
}
eg:
//指定USB规范
interface IUSB
{
void swapData();
}
//USB版本鼠标
class Mouse implements IUSB
{
public void swapData()
{
System.out.println("鼠标...");
}
}
//主板(鼠标需要插到主板上工作)
class MotherBoard
{
private static IUSB[] usbs = new IUSB[6];
private static int index = 0;//表示插入到第几个位置
//把设备插入到主板中的功能,接受IUSB类型的对象
public static void pluginIn(IUSB usb)
{
if(index == usbs.length)
{
System.out.println("USB插槽已经满了");
}
usbs[index] = usb;
index++;
}
//取出主板中的每一个USB设备,并工作
public static void doWork()
{
for(IUSB usb:usbs)
{
if(usb != null)
{
usb.swapData();
}
}
}
}
//实例:使用USB设备来工作
class USBDemo
{
public static void main()
{
//创建鼠标对象
MotherBoard.pluginIn(new Mouse());
//安装打印机
MotherBoard.pluginIn(new Print());
//安装USB键盘(只安装一次)
//创建一个IUSB的匿名实现类对象
MotherBoard.pluginIn(new IUSB()
{
//匿名内部实体
public void swapData()
{
System.out.println(键盘...);
}
}
);
MotherBoard.doWork();
}
}
特点3:
//创建一个