黑马程序员技术交流社区
标题:
new 接口
[打印本页]
作者:
侠客梦的懒猫
时间:
2013-12-15 16:45
标题:
new 接口
对我们学习过程中,遇到很多这样的问题,就是
(new Runnable(){
})
或是
new InvocationHandler(){
}
这些接口都可以直接new吗?还是其实new的就是一个实例!!
作者:
侠客梦的懒猫
时间:
2013-12-15 23:41
专走泥泞路,谢谢你,你说的很好,但经过自己查阅,我补充一下,相互学习,接口与抽象类是不能直接new的,如果我们new Runnable(),这是通过不了编译的,但是注意如果加{},也就是这样new Runnable(){},他表示的并不是接口创建对象,而是接口实现的实例去创建的对象,但是这个实例并没有名字。希望多多交流,Thank哦
作者:
潘际昌
时间:
2013-12-15 23:48
本帖最后由 潘际昌 于 2013-12-15 23:49 编辑
这是匿名内部类,利用多态,用父类来来new的匿名子类对象或者匿名实现类对象,但是必须把接口内的抽象方法复写掉,这样才可以编译通过!
作者:
litaojisuanji
时间:
2013-12-16 00:16
本帖最后由 litaojisuanji 于 2013-12-16 00:19 编辑
这个是匿名内部类,利用到了多态的技术,和Animal a = new Dog();一样的道理,
接口是不能直接new的,因为接口中都是抽象的方法,
而匿名内部类可以直接new,因为匿名内部类实现的接口中的方法。
如下:
//创建一个接口
interface Inter
{
public abstract void show();
}
class Outer
{
public void method()
{
//匿名内部类:new 接口{实现接口的方法}.方法名
new Inter()
{
public void show()
{
System.out.println("show");
}
}.show();
}
}
class Demo
{
public static void main(String[] args)
{
Outer o = new Outer();
o.method();
}
}
复制代码
作者:
雨的印记yp
时间:
2013-12-16 00:53
这是匿名内部类,其实new出来的是接口的实现类的匿名对象。这个实现类和对象都是匿名的。这也是java的多态。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2