接口的小问题
接口不是不能够创建吗?下面的代码怎么会事呀?//创建一个接口
interface jiekou{
public abstract void pp();
}
public class test {
public void fangfa(jiekou s){
System.out.println("nihao");
}
public static void main(String[] args) {
test p=new test();
p.fangfa(new jiekou(){public void pp() {}});//方法括号里面的是myeclipse添加的,然后程序就能运行了。
}
}
到底是怎么回事呀??? --------------------编程问答-------------------- 它是不是隐式声明了一个叫jiekou的类 --------------------编程问答-------------------- 接口确实是不能NEW的
但这里不是创建借口,这是创建了个匿名类类
http://my.csdn.net/my/favorite --------------------编程问答-------------------- 这里创建了一个实现该接口的匿名类,语法规则记住好了 --------------------编程问答-------------------- 能详细点吗??? --------------------编程问答-------------------- 创建了一个实现该接口的匿名类 --------------------编程问答--------------------
具体是怎么实现的??? --------------------编程问答-------------------- 何为接口的匿名类? --------------------编程问答-------------------- 匿名类,新建了一个实现这个借口的类的实例 --------------------编程问答-------------------- 下面你在调用函数的时候,不是实现了那个接口的虚函数吗,这样就可以了啊 --------------------编程问答-------------------- 当实现借口的类,需要用的地方只有个别地方,那么可以用一个匿名内部类来代替它。匿名内部类他必然实现某个借口(同时实现其中的方法)或者继承某个基类(实现其中的某个方法)。(个人愚见不对忘大家指出共同学习)。 --------------------编程问答-------------------- 接上面的应该是“或者继承某个基类(从写其中的某些方法)”),(个人愚见不对忘大家指出共同学习)。 --------------------编程问答-------------------- public void fangfa(jiekou s){
System.out.println("nihao");
} 这个方法传的是借口类型的参数
p.fangfa(new jiekou(){public void pp() {}});//方法括号里面的是myeclipse添加的,然后程序就能运行了。
}
这里调用的时候 new 了一个接口类型的,并且重写了里面的方法,所以可以实现 --------------------编程问答-------------------- new jiekou(){public void pp() {}}
这个是不是一个类
但是你不知道他的名字所以就叫匿名类了。 --------------------编程问答-------------------- 创建了一个实现该接口的匿名类 --------------------编程问答-------------------- 对,你可以看下编译后的class文件,已经多了一个,其实是创建了一个实现此接口的匿名内部类。
补充:Java , Java SE