在一个接口或抽象类定义完成后,在使用前都需要定义专门的子类,随后利用子类对象的向上转型才可以使用接口或抽象类。但是在很多时候某些子类可能只使用一次,那么单独为其创建一个类文件就会非常浪费,此时就可以利用匿名内部类的概念来解决此类问题。
范例:使用匿名内部类
public interface IMessage266 { //定义接口
public void send(String str); //抽象方法
}
public class Java266A {
public static void main(String[] args) {
//接口对象无法直接实例化,而使用匿名内部类后就可以利用对象的实例化格式获取接口实例
IMessage266 msg=new IMessage266() //直接实例化接口对象
{ //匿名内部类
public void send(String str) { //覆写方法
System.out.println(str);
}
};
msg.send("www.匿名内部类.com"); //调用接口方法
}
}
执行结果
www.匿名内部类.com
匿名内部类没有具体的名称,所以只能够使用一次,而使用它的优势在于:减少类的定义数量。
如果不使用匿名内部类,并且在IMessage接口子类只使用一次的情况下,那么就需要定义一个Message的接口子类,显得比较浪费。匿名内部类大部分情况下都是结合接口、抽象类来使用的。
结合接口中static方法,也可以直接将匿名内部类定义在接口中,这样也可以方便的进行引用。
范例:在接口中利用匿名内部类实现接口
public interface IMessage266B {
public void send(String str); //抽象方法
public static IMessage266B getInstance() { //static方法可以直接调用
return new IMessage266B() //实例化接口对象
{ //匿名内部类
public void send(String str) { //方法覆写
System.out.println(str);
}
};
}
}
public class Java266B {
public static void main(String[] args) {
IMessage266B.getInstance().send("www.匿名内部类");
}
}
执行结果
www.匿名内部类
本程序利用匿名内部类直接在接口中实现了自身,这样的操作形式适合于接口只有一个子类的时候,并且对外部调用处隐藏子类。
本文探讨了在Java中如何使用匿名内部类简化代码,特别是在处理接口或抽象类的临时子类时。通过实例展示了匿名内部类如何减少类定义数量,提高代码效率。
1791

被折叠的 条评论
为什么被折叠?



