黑马程序员技术交流社区

标题: 关于接口实例化问题 [打印本页]

作者: 小小程序员    时间: 2014-10-14 21:51
标题: 关于接口实例化问题
对于接口是不能实例化的。
为什么对于下面的fun()方法内 却new了一个IA接口
而且编译,运行都是没问题的
哪位大神 可以给解释下


interface IA
{
void show();
}
class Demo
{
public static void fun(IA aObj){
  aObj.show();
}

public static void main(String[] args)
{
  fun(new IA(){
   public void show(){
    System.out.println("A -->show()");
   }
  });
}
}


作者: DreamSeeker    时间: 2014-10-16 07:52
这是个匿名内部类,你去看看毕老师视频,面向对象那个环节有一个视频是专门讲内部类的的,里面就有成员内部类、局部内部类和匿名内部类。
作者: 最给力回复    时间: 2014-10-16 12:10
匿名  内部类
作者: ifinver    时间: 2014-10-16 14:09
本帖最后由 ifinver 于 2014-10-16 14:15 编辑

这不是匿名内部类的问题。。
比如List是个接口
new List() 是错误的,接口不能实例化
然而有个类
  1. class NoName implements List{
  2. NoName(){}
  3. }
复制代码

NoName可以实例化了,它实现了List接口。上面的写法就很麻烦,jdk给简化成了:
  1. new List(){
  2. //.....
  3. }
复制代码

其实就是系统在内部定义了一个类,实现了List接口,然后把它实例化出来。效果是一样的。不用变量接收存储这个引用 他就是匿名的 只能用一次,用个变量存储它,它就不是匿名的。










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2