黑马程序员技术交流社区

标题: 探讨一个关于关于接口能否实例化的问题 [打印本页]

作者: yanglfree    时间: 2013-9-14 13:59
标题: 探讨一个关于关于接口能否实例化的问题
根据接口的定义,接口本身应该是不可以实例化的

但是实际使用上却看到很多地方创建了接口对象
比如API中关于接口lock里面的一段话:

newConditionCondition newCondition()返回绑定到此 Lock 实例的新 Condition 实例。 在等待条件前,锁必须由当前线程保持。调用 Condition.await() 将在等待前以原子方式释放锁,并在等待返回前重新获取锁。
实现注意事项
Condition 实例的具体操作依赖于 Lock 实现,并且该实现必须对此加以记录。

返回:用于此 Lock 实例的新 Condition 实例 抛出: UnsupportedOperationException - 如果此 Lock 实现不支持条件
Lock 和Coundition 不是都是接口吗?要实例化也只能是他们的子类才有实例的。求解。

作者: 冷漠无天    时间: 2013-9-14 14:58
不太明白你说的希望这个http://blog.csdn.net/hperfectlife/article/details/8267069对你有用。
作者: zhou5852    时间: 2013-9-15 13:01
额,对于抽象类,接口  大家的第一印象就是它不能实例化,其实这是片面的,接口和抽象类之所以不能直接创建对象是因为其中有未实现的方法,如果在创建时将方法覆盖了 也可以了,我和大家的理解都不一样,我相信java之父也会在他接下来要发行的书里详细介绍匿名内部类,其实底层的不需要太多关心,只要我们有了一种理解,这种理解能引导正确的使用就可以了.举大家常用的线程的例子:
Runnable r = new Runable(){
@override
run(){
}
'};
在内存中就是r 指向了一个已经实现了的方法,而不是定义时的方法,这就是java多态的机制吧,这样的确,我们看到了实例化了一个接口,而且抽象类也能这样做,一般类也能,我称之为运行时改变类的结构,这个难道和动态代理不一样吗?,的确 有人非要认为是匿名内部类,可以这么理解 没错,但是我认为我的理解也不会错,这种写法只不过是java在运行时直接改变类的某些结构的机制罢了,怎么理解能正确的运行就可以了,我感觉这样理解简单多了
作者: 杨增坤    时间: 2013-9-16 11:27
不太明白你说的什么意思!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2