Java 抽象类不能 retrofit 到现有类上

标签 java abstract-class mixins

我一直在读《Effective Java》,我并没有真正遵循以下论点。 如果有人可以帮我解决这个问题

抽象类不能用于定义 mixins,其原因与它们不能定义 mixin 的原因相同。 改造现有的类:

尤其是“我不明白‘抽象类不能改造到现有类上’”

请举个例子。

http://books.google.se/books?id=ka2VUBqHiWkC&lpg=PA93&dq=Abstract%20classes%20cannot%20be%20used%20to%20define%20mixins%20for%20the%20same%20reason%20that%20they%20can 't%20be%20retrofitted%20onto%20existing%20classes&pg=PA93#v=onepage&q=Abstract%20classes%20cannot%20be%20used%20to%20define%20mixins%20for%20the%20same%20reason%20that%20they%20can't %20be%20retrofitted%20onto%20existing%20classes&f=false

谢谢

最佳答案

想象一下,如果 Java 中不存在接口(interface),但 Java 仍然是单继承。

现在想象一下,如果您想编写一个属于流的类,那么您可以让它继承现有的 Stream 类,以防止重写所有代码。啊 - 但你也希望你的类是可序列化的,所以你从 Serializ 继承 - 等一下......你已经从 Stream 继承了。您也不能从该类继承。因此,您现在处于一个困难的境地,您必须重写大量代码,或者干脆放弃。

这就是“抽象类不能 retrofit 到现有类上”的含义 - 如果一个类位于某个类型层次结构中,则在不重写类型层次结构的情况下使其实现/继承新抽象类的行为是不可能的。

(我也同意书上解释得很清楚的评论)

关于Java 抽象类不能 retrofit 到现有类上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739748/

相关文章:

java - 恰好有 8 个除数的所有数字

java - 将字符串中的所有单词集替换为其他单词集

c# - 接口(interface)与抽象类

java - 抽象类的具体子类作为原始类中的参数,没有抽象方法实现

javascript - 在 JavaScript 中混入本身就是对象的对象属性

css - 在另一个 mixins 中更改 mixins 参数

variables - Less > 在常量上定义变量

java - java中元空间区域或permgen的引用在哪里

java - 如何在 Java 中实现自定义本地 DNS 服务?

java - Java 中继承常量的最佳实践是什么?