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”就是用到了匿名内部类了。