发表于 2014-09-24 17:42:05 楼主 | |
AQS中有个public 内部类,(没错就是public 内部类,可以观看JAVA基础教程)实现了Condition接口,叫做ConditionObject :
一般,内部类是不允许被定义为public的,这里可以的原因是它的外部类AQS(AbstractQueuedSynchronizer)是抽象类,所以它可以有一个public的内部类。 我用一段demo模拟了这种结构:
可以看到Condition的signal方法可以调用外部抽象类的enq方法,这里编译通过了,是不是觉得很奇妙,为什么一个public的内部类类还可以调用外部抽象类的方法呢? 抽象类是不能被实例化的,那它的成员方法怎么会被调用?
仔细琢磨一番后,想起来了, 内部类的实例化只有加上static 修饰符后 才可以不和外部类有任何关系,随意进行实例化,你可以把static 修饰的内部类直接当成一个完全独立的类是去使用。 反之,不管你是不是被public 修饰,只要是内部类,就必须依托于外部类的一个实例去实例化,这里外部类是抽象的,不能直接实例化,那还不简单,这么做:
通过编译了,再运行一下:
用法还是很巧妙的,没错,Condition和AQS就是这么设计和实现的。想学习编程语言教程知识请登录e良师益友网。 |
|
楼主热贴
个性签名:无
|
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见