java学习之匿名内部类

来源:互联网 发布:水仙花数java 编辑:程序博客网 时间:2024/06/04 18:26

匿名内部类:就是内部类的简写格式。
前提:
内部类必须继承或者实现一个外部类或者接口

下图中5-11行定义了一个匿名内部类,该类是Object类的一个子类。由于java中有一个最顶级的类Object,

其他类都隐式继承自这个类,所以这样定义没问题。然后在该类中实现show()方法,并在末尾调用。

但是14-26行的定义方式和调用方式就会编译出错。因为第14行的定义方式表示new Object()这个匿名子类对象

已经向上转型为Object类型了,一转型就隐藏了它的子类型,并限定了特有方法的使用,这就是多态。

编译时看左边,由于Object这个类中找不到函数show1()和show2(),所以编译时就会报错。

class Outer{void method(){new Object(){void show(){System.out.println("show run...");}}.show();/*Object obj = new Object(){void show1(){System.out.println("show1 run..");}void show2(){System.out.println("show2 run...");}}obj.show1();obj.show2();*/}}public class InnerClassDemo5 {public static void main(String[] args) {new Outer().method();}}

匿名内部类其实就是匿名子类对象

通常的使用场景之一:
当函数参数是接口类型时,而且接口中的方法不超过三个。

可以用匿名内部类作为实际参数进行传递。

interface Inter{public abstract void show1();public abstract void show2();}public class InnerClassDemo4 {public static void main(String[] args){/*通常的使用场景之一:     当函数参数是接口类型时,而且接口中的方法不超过三个。     可以用匿名内部类作为实际参数进行传递。*/show(new Inter(){public void show1(){System.out.println("Inner show1 run");}public void show2(){System.out.println("Inner show2 run");}});}public static void show(Inter in){in.show1();in.show2();}}


0 0
原创粉丝点击