实际使用中我们只需注意这几点儿:
1. 使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2. 匿名内部类中是不能定义构造函数的。
3. 匿名内部类中不能存在任何的静态成员变量和静态方法。
4. 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5. 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
匿名类的语法
Runnable hello = new Runnable() { public void run() { System.out.println("hello"); } };
一个匿名类由以下几个部分组成:
new操作符
Runnable:接口名称。这里还可以填写抽象类、普通类的名称。
():这个括号表示构造函数的参数列表。由于Runnable是一个接口,没有构造函数,所以这里填一个空的括号表示没有参数。
{…}:大括号中间的代码表示这个类内部的一些结构。在这里可以定义变量名称、方法。跟普通的类一样。
匿名内部类方法的访问:
//方法1:直接在new A内部类后边加点加方法,这样访问,如果方法多了,调用太麻烦 new D(){ @Override public void ShowContext() { System.out.println("hello"); } }.ShowContext(); //方法2:通过创建对象来访问,多态思想 D a=new D(){ @Override public void ShowContext() { System.out.println("hello"); } }; a.ShowContext();
匿名内部类在开发中的使用,一般是方法参数为接口的情况
interface D{ void ShowContext(); } class B{ //参数为接口对象 public void show(D d) { d.ShowContext(); } } public class niming { public static void main(String[]args) { B b=new B(); //调用时使用匿名类创建匿名对象 b.show(new D(){ @Override public void ShowContext() { System.out.println("hello"); } }); } }