黑马程序员 --------------匿名内部类与图形界面AWT的结合及窗口事件
.------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
匿名内部类:
匿名内部类 :就是(局部)内部类的简化写法。
1. 前提:存在一个类(具体类或抽象类)或者接口(抽象)
2. 匿名对象格式: new 类名或者接口名(){重写所有的方法(添加方法体内容);}.方法
new 类名或者接口名(){重写所有的方法(添加方法体内容);}.方法
3. 匿名内部类本质是什么呢?
本质 new 了一个匿名对象, 在堆内存开辟了一个空间(1.具体类的对象2.抽象类的子类的对象 3.实现接口的实例子类的对象)
是一个(继承了该类或者实现了该接口的具体子类)的匿 名对象。
即是匿名对象,就可调方法
在开发中,当我们看到抽象类或接口作为参数时,需要传入的是一个具体的实现子类对象.如果该方法只调用一次,我们就可以使用
匿名内部类的格式来做
4.匿名内部类其实就是外部类,里面有一个类,这个类没有名字,就不能创建对象,那就继承他的父类或其接口,
父类或其接口是抽象类,内有抽象的方法,没有方法体内融合,也不能创建对象,咋办啦?
这时我们就要给父类的对象加上一个{},里面覆盖了抽象方法函数,同事还要自定义 方法体内容。
5.创建了父类的对象,并有对象体内容,我们称为胖对象,匿名内部类其实就是内部类的简写格式。
6.其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。
匿名内部类中定义的方法最好不要超过3个。
在java.awt.*;有一个类window中有一个方法函数,即void addwindowListener(WindowListener l)
WindowListener l是一个接口,而在java.awt.event.*中有一个类Windowadapter可以实现 WindowListener接口
并覆盖了其中的所有方法 我们自定义一个子类继承自Windowadapter覆盖我需要的方法即可
public abstract class WindowAdaper implenments WindowListener
{ void windowActivated(windowEvent e){}
void windowClosed(windowEvent e){}
void windowAClosing(windowEvent e){}
void windowInconified(windowEvent e){}
void windowOpened(windowEvent e){}
}
因为WindowListener的子类WindowAdapter已经实现了Win dowListener接口。
并覆盖了其中的所有方法。那么我只要继承自Windowadapter覆盖我需要的方法即可。
*/
class Nimin
{
public static void main(String[] args)
{
//建立一个窗体Frame的对象,并初始化了姓名
Frame f =new Frame("我的窗口");
//设置窗口的显示
f.setVisible(true);
//设置窗口的图形面积大小
f.setSize(500,250);
//设置窗口的图形在屏幕的位置
f.setLocation(300,200);
//设置窗口的布局管理方式,这里采用
f.setLayout(new FlowLayout());
//创建子类Button的对象,并初始化值
Button b =new Button("按钮");
//调用容器子类 Containerd 的add()方法,把按钮添加进窗口组件里
f.add(b);
1.第一种传统的 f.addWindowListener(new myWin())方法
//自定义一个子类myWin继承父类 WindowAdaper 父类WindowAdaper 实现 接口 WindowListener
class myWin extends WindowAdaper(windowEvent e)
{ void windowActivated(windowEvent e)
{System.out.println("激活窗口事件"+e.toString());}
void windowOpened(windowEvent e)
{System.out.println("关闭窗口事件"+e.toString());
System.exit(0);
}
}
//添加窗口监听器WindowListener
f.addWindowListener(new myWin())
2.这里用new myWin()的匿名内部类
f.addWindowListener(new myWin()
{
public void windowClosing(WindowEvent e)
{
System.out.println(" 关闭窗口事件"+e.toString());
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("激活窗口事件"+e.toString());
}
public void windowOpened(WindowEvent e)
{
System.out.println(" 打开窗口事件"+e.toString());
}
});
System.out.println("Hello World!");
}
}