JAVA 匿名内部类和回调函数

publicclassC{interfaceInner{//定义一个内部接口intcount(inta);Stringdes(Stringb);}publicvoidex... public class C {
interface Inner{ //定义一个内部接口
int count(int a);
String des(String b);
}
public void ex(Inner inner){
System.out.print(inner.count(100));
System.out.print(inner.des("美元"));
}
public static void main(String[] args) {
new C().ex(new Inner(){ //实例对象调用ex方法,ex方法传的参数是内部接口的对象,但接口不是不能直接实例化么?不是要通过接口对象指向实现类才能得到它的实例?为何这里能直接实例化接口?还是说这里其实是实例化一个匿名内部类?那匿名内部类是如何继承这个内部接口来达到实现接口的目的的?
这部分概念不是很清楚,请大大们不吝赐教啊!!
public int count(int a){
return a;
}
public String des(String b){
return b;
}
});
}
}

最后,请简单的说下什么是回调函数
展开
 我来答
heptnaol
2014-12-12 · TA获得超过7260个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1758万
展开全部
new Inner()后面的一对花括号,表示的是匿名内部类,此类的父类显然是Object,实现接口Inner。
Inner是接口,接口和抽象类都是不能直接实例化的,也就是说
Inner in = new Inner();这样写是不能通过编译的,不过java的语法支持就地使用一个匿名类来实现所有的抽象方法(接口的所有方法声明和抽象类的所有抽象方法)
更多追问追答
追问
new C().ex(new Inner(){ //匿名类类体}      
那请问这里 new Inner()能不能改成new C()或其它任何构造器?如不能,那为何这里必须要用new Inner(),是否这里的构造器就是匿名内部类所要实现的接口或抽象类的构造器(如:还有一个内部接口link,想实现link接口这里就要写new link()而不是new Inner)

谢谢
追答

这里你要传递一个Inner作为参数,所以只能是new Inner了,new C的话

你需要class C implements Inner,不管是接口还是类,implements 还是extends,你可以统一理解为继承,任何需要父类的地方,子类都可以,反过来则不行

现在有几个问题:

1,C的父类是神马?

2,Inner的父类是神马?

3,这个匿名类的父类是神马?

{       
  public int count(int a){
   return a;
  }
  public String des(String b){
   return b;
  }
 }

1,C的父类是Object

2,Inner的父类是Object

3,匿名类的直接父类是Object,间接父类是Inner

显然,需要Inner类型参数的地方,不能放C类型,类型不符

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式