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;
}
});
}
}
最后,请简单的说下什么是回调函数 展开
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;
}
});
}
}
最后,请简单的说下什么是回调函数 展开
1个回答
展开全部
new Inner()后面的一对花括号,表示的是匿名内部类,此类的父类显然是Object,实现接口Inner。
Inner是接口,接口和抽象类都是不能直接实例化的,也就是说
Inner in = new Inner();这样写是不能通过编译的,不过java的语法支持就地使用一个匿名类来实现所有的抽象方法(接口的所有方法声明和抽象类的所有抽象方法)
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类型,类型不符
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询