gpt4 book ai didi

java - 为什么我不能用 Java 写 "implements AClass"?

转载 作者:搜寻专家 更新时间:2023-10-31 08:15:59 25 4
gpt4 key购买 nike

在 Java 中,人们经常将接口(interface)与类一起定义,并在可能的情况下使用接口(interface)名称而不是类名称,以便以后允许新的实现。这里的逻辑接口(interface)是重复的。

如果 Java 允许使用一个类作为接口(interface),这种“以防万一”的复制就没有必要了,例如:class MyScanner extends MyStuff implements java.util.Scanner。这也将缓解我需要提供类类型但我不想扩展该类的情况。

据我所知,“实现一个类”不仅会被编译器拒绝,也会被 JVM 拒绝(如果我将此声明修改到类文件中)。这是否存在一些技术困难或者它不被认为是重要的事情?它看起来不像是向后兼容性问题(我的意思是,如果 JVM 支持的话,旧代码可以正常运行)。

编辑:为了澄清,我将在这里复制 StriplingWarrior 对相同问题的更好措辞:

Why can't a class "implement" another class's method contract without actually extending that class? Is it a technical issue? Would it somehow open us up to some issues that the OP can't foresee?

最佳答案

我对 MyClass implements AClass 的理解正确吗?将意味着 MyClass必须为 AClass 的所有公共(public)方法提供(或继承)实现拥有? IE。每个类都隐式定义了一个由其公共(public)方法组成的接口(interface)?

如果是这样,那么我看到的问题是接口(interface)确实与类非常不同,两者不应该那样混合。接口(interface)定义契约,类定义实现。其结果是:类的功能可以相对自由地扩展,但不能与现有实现接口(interface)。

所以你有一个非常具体的理由来解释为什么你的建议不好:你永远不能将任何公共(public)方法添加到任何类而不冒破坏一些代码的风险 implements那个类。

另一方面,它会解决什么问题?当你有一个单一实现的接口(interface)时代码重复?不做就解决这个问题怎么样?在我看来,这通常是人们在使用无法模拟具体类的过时模拟框架时教条地进行 TDD 的人所做的事情。

关于java - 为什么我不能用 Java 写 "implements AClass"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com