A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小程序员 中级黑马   /  2014-10-14 21:51  /  1177 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于接口是不能实例化的。
为什么对于下面的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()");
   }
  });
}
}

3 个回复

倒序浏览
这是个匿名内部类,你去看看毕老师视频,面向对象那个环节有一个视频是专门讲内部类的的,里面就有成员内部类、局部内部类和匿名内部类。
回复 使用道具 举报
匿名  内部类
回复 使用道具 举报
本帖最后由 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接口,然后把它实例化出来。效果是一样的。不用变量接收存储这个引用 他就是匿名的 只能用一次,用个变量存储它,它就不是匿名的。





回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马