Aiv*_*var 5 java compiler-construction jvm
在Java中,人们经常将类与类一起定义并尽可能使用接口名而不是类名,以便稍后允许新的实现.这里逻辑接口是重复的.
如果Java允许使用类作为接口,则不需要这种"以防万一"复制,例如:class MyScanner extends MyStuff implements java.util.Scanner.此外,这将缓解我需要提供类类型但我不想扩展该类的情况.
据我所知,"实现一个类"不仅会被编译器拒绝,也会被JVM拒绝(如果我将这个声明破解成类文件).对此有一些技术上的困难,还是不重要?它看起来不像是一个向后兼容问题(我的意思是,如果JVM支持这个问题,旧代码就可以正常运行).
编辑:为了澄清,我将在这里复制StriplingWarrior更好的相同问题的措辞:
为什么一个类不能实现另一个类的方法契约而不实际扩展该类?这是技术问题吗?是否会以某种方式向我们提出OP无法预见的一些问题?
我是否理解正确,MyClass implements AClass这意味着MyClass必须为所有公共方法提供(或继承)实现AClass?即每个类隐式定义一个由其公共方法组成的接口?
如果是这样,那么我看到的问题是接口实际上与类非常不同,并且两者不应该像那样混合.接口定义合同,对实现进行分类.结果是:类的功能可以相对自由地扩展,但不是与现有实现的接口.
因此,你有一个非常具体的理由说明你的建议是坏的:你永远不能将任何公共方法添加到任何类,而不会冒破坏implements该类的一些代码.
而另一方面,它会解决什么问题?当您具有单个实现的接口时代码重复?如何解决这个问题呢?IMO通常是由人们在使用过时的模拟框架而不能模仿具体类的情况下教条地做的事情.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |