匿名内部类
1.匿名内部类使用演示
public void addListener(){
JButton button=new JButton();
//如下为匿名内部类演示
button.addActionListener(new ActionListener() {
//结构分析:new ActionListener(){}相当于是ActionListener这个接口的一个实现类对象
//{}中的内容只是对抽象方法的重写
//并不会实现对方法的调用
//若需调用需要.方法名,以实现调用
@Override
public void actionPerformed(ActionEvent e) {
}
});
}
2.匿名内部类调用方法演示
new Animal(){
@Override
public void eat() {
name="zyr";
super.eat();
//eat方法中的name为zyr
name="zjf";
//前一个name无用,自带final关键字
name="ljy";
super.sleep();
//sleep方法中的name为ljy
System.out.println("猴子在吃");
}
}.eat();
一般情况下,匿名内部类用于传递参数,在所传参数的类只有一个方法时,觉得没必要为此再专门写一个类时,即可直接使用匿名内部类
一个疑问
但是,我还用MouseListener做了一下测试(含有五个方法),其实用匿名内部类重写方法后,也是可以正常用的,所以含有多个方法应该也没有关系
那么为什么说匿名内部类要用于只含有一个方法的类呢
3.为什么要使用匿名内部类
若不使用匿名内部类,则需要先新建一个类继承接口,然后在接口的实现类中重写方法,之后创建该类的实例化对象之后再传入参数,相当麻烦,而且为了传参而创建的这个类没有什么太大其他的用处
但是因为匿名内部类使用时不会有子类名或是接口实现类名,所以无法创建对象,因此要么作为方法参数,要么创建对象(没有实例化),调用方法,只能二得一
4.作为方法参数的示例
public void eatAnimal (Animal animal){
System.out.println(animal.name+"被吃了");
}
public static void main(String[]args) {
Demo1 a = new Demo1();
a.addListener();
a.eatAnimal(new Animal(){
@Override
public void eat() {
super.eat();
System.out.println("狗狗在吃");
}
});