A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

根据接口的定义,接口本身应该是不可以实例化的

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

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

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

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

3 个回复

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

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
不太明白你说的什么意思!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马