Java匿名内部类指的是没有名称的类,我们必须要覆盖抽象类或接口的方法,Java匿名内部类可以通过两种方式来定义,分别为为抽象类或者接口,分别如下:
1:以抽象类的定义方式:
abstract class Person{
abstract void eat();
}2:以interface接口的形式定义抽象类:
public interface Person2{
void eat();
}那么我们如何使用Java匿名内部类呢?请看如下示例:
public class TestAnonymousInner {
public static void main(String[] args) {
Person ps = new Person() {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("匿名内部类输出滴!");
}
};
ps.eat();
}
}乍一看,你会惊奇了,你上面说的不是匿名内部类吗?怎么还给它起了一个“ps”的名字,然后调用eat()方法呢?其实只是写法问题,你完全可以将上方的匿名内部类改成如下这种形式,不需要用类名称“ps”调用eat()方法,代码如下:
public class TestAnonymousInner {
public static void main(String[] args) {
new Person() {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("匿名内部类输出滴!");
}
}.eat();
}
}
abstract class Person{
abstract void eat();
}这样你是不是觉得有点眼熟?我们在java或者android开发中,经常会有一些类似Button按钮的点击事件中会用到Java匿名内部类作为监听,这也只是匿名内部类的使用场景之一,代码如下:
class myPanel extends JPanel {
. . .
public MyPanel() {
//in the constructor
JButton b1 = new JButton("Hello");
b1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
// do something for button b1
}
}
);
}
}上面的这段代码中“ActionListener”就是用到了匿名内部类了。